obsidian-mcp-pro 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.
- package/LICENSE +21 -0
- package/README.md +198 -0
- package/build/config.d.ts +4 -0
- package/build/config.d.ts.map +1 -0
- package/build/config.js +147 -0
- package/build/config.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +135 -0
- package/build/index.js.map +1 -0
- package/build/lib/markdown.d.ts +43 -0
- package/build/lib/markdown.d.ts.map +1 -0
- package/build/lib/markdown.js +206 -0
- package/build/lib/markdown.js.map +1 -0
- package/build/lib/vault.d.ts +22 -0
- package/build/lib/vault.d.ts.map +1 -0
- package/build/lib/vault.js +182 -0
- package/build/lib/vault.js.map +1 -0
- package/build/tools/canvas.d.ts +3 -0
- package/build/tools/canvas.d.ts.map +1 -0
- package/build/tools/canvas.js +172 -0
- package/build/tools/canvas.js.map +1 -0
- package/build/tools/links.d.ts +3 -0
- package/build/tools/links.d.ts.map +1 -0
- package/build/tools/links.js +550 -0
- package/build/tools/links.js.map +1 -0
- package/build/tools/read.d.ts +3 -0
- package/build/tools/read.d.ts.map +1 -0
- package/build/tools/read.js +302 -0
- package/build/tools/read.js.map +1 -0
- package/build/tools/tags.d.ts +3 -0
- package/build/tools/tags.d.ts.map +1 -0
- package/build/tools/tags.js +146 -0
- package/build/tools/tags.js.map +1 -0
- package/build/tools/write.d.ts +3 -0
- package/build/tools/write.d.ts.map +1 -0
- package/build/tools/write.js +241 -0
- package/build/tools/write.js.map +1 -0
- package/build/types.d.ts +84 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { writeNote, appendToNote, prependToNote, deleteNote, moveNote, readNote, } from "../lib/vault.js";
|
|
3
|
+
import { updateFrontmatter } from "../lib/markdown.js";
|
|
4
|
+
import { getDailyNoteConfig } from "../config.js";
|
|
5
|
+
import fs from "fs/promises";
|
|
6
|
+
import path from "path";
|
|
7
|
+
function textResult(text) {
|
|
8
|
+
return { content: [{ type: "text", text }] };
|
|
9
|
+
}
|
|
10
|
+
function ensureMdExtension(filePath) {
|
|
11
|
+
return filePath.endsWith(".md") ? filePath : `${filePath}.md`;
|
|
12
|
+
}
|
|
13
|
+
function formatDate(date, format) {
|
|
14
|
+
const yyyy = date.getFullYear().toString();
|
|
15
|
+
const mm = (date.getMonth() + 1).toString().padStart(2, "0");
|
|
16
|
+
const dd = date.getDate().toString().padStart(2, "0");
|
|
17
|
+
return format
|
|
18
|
+
.replace("YYYY", yyyy)
|
|
19
|
+
.replace("MM", mm)
|
|
20
|
+
.replace("DD", dd);
|
|
21
|
+
}
|
|
22
|
+
function objectToYamlFrontmatter(obj) {
|
|
23
|
+
const lines = Object.entries(obj).map(([key, value]) => {
|
|
24
|
+
if (Array.isArray(value)) {
|
|
25
|
+
const items = value.map((v) => ` - ${v}`).join("\n");
|
|
26
|
+
return `${key}:\n${items}`;
|
|
27
|
+
}
|
|
28
|
+
if (typeof value === "string" && (value.includes(":") || value.includes("#"))) {
|
|
29
|
+
return `${key}: "${value}"`;
|
|
30
|
+
}
|
|
31
|
+
return `${key}: ${value}`;
|
|
32
|
+
});
|
|
33
|
+
return `---\n${lines.join("\n")}\n---\n`;
|
|
34
|
+
}
|
|
35
|
+
async function noteExists(vaultPath, relativePath) {
|
|
36
|
+
try {
|
|
37
|
+
await fs.access(path.resolve(vaultPath, relativePath));
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function registerWriteTools(server, vaultPath) {
|
|
45
|
+
// 1. create_note
|
|
46
|
+
server.registerTool("create_note", {
|
|
47
|
+
description: "Create a new note with optional frontmatter and content",
|
|
48
|
+
inputSchema: {
|
|
49
|
+
path: z.string().describe("Relative path like 'folder/note.md'"),
|
|
50
|
+
content: z.string().describe("Note content"),
|
|
51
|
+
frontmatter: z
|
|
52
|
+
.string()
|
|
53
|
+
.optional()
|
|
54
|
+
.describe("JSON string of key-value pairs to add as YAML frontmatter"),
|
|
55
|
+
},
|
|
56
|
+
}, async ({ path: notePath, content, frontmatter }) => {
|
|
57
|
+
try {
|
|
58
|
+
const resolvedPath = ensureMdExtension(notePath);
|
|
59
|
+
if (await noteExists(vaultPath, resolvedPath)) {
|
|
60
|
+
return textResult(`Error: Note already exists at '${resolvedPath}'. Use append or update tools instead.`);
|
|
61
|
+
}
|
|
62
|
+
let finalContent = content;
|
|
63
|
+
if (frontmatter) {
|
|
64
|
+
let parsed;
|
|
65
|
+
try {
|
|
66
|
+
parsed = JSON.parse(frontmatter);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return textResult("Error: Invalid JSON in frontmatter parameter.");
|
|
70
|
+
}
|
|
71
|
+
finalContent = objectToYamlFrontmatter(parsed) + content;
|
|
72
|
+
}
|
|
73
|
+
await writeNote(vaultPath, resolvedPath, finalContent);
|
|
74
|
+
return textResult(`Created note at '${resolvedPath}'.`);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
console.error("create_note error:", err);
|
|
78
|
+
return textResult(`Error creating note: ${err instanceof Error ? err.message : String(err)}`);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
// 2. append_to_note
|
|
82
|
+
server.registerTool("append_to_note", {
|
|
83
|
+
description: "Append content to the end of an existing note",
|
|
84
|
+
inputSchema: {
|
|
85
|
+
path: z.string().describe("Relative path to the note"),
|
|
86
|
+
content: z.string().describe("Content to append"),
|
|
87
|
+
ensureNewline: z
|
|
88
|
+
.boolean()
|
|
89
|
+
.optional()
|
|
90
|
+
.default(true)
|
|
91
|
+
.describe("Ensure content starts on a new line (default: true)"),
|
|
92
|
+
},
|
|
93
|
+
}, async ({ path: notePath, content, ensureNewline }) => {
|
|
94
|
+
try {
|
|
95
|
+
const resolvedPath = ensureMdExtension(notePath);
|
|
96
|
+
const preparedContent = ensureNewline ? content : content;
|
|
97
|
+
await appendToNote(vaultPath, resolvedPath, preparedContent);
|
|
98
|
+
return textResult(`Appended content to '${resolvedPath}'.`);
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
console.error("append_to_note error:", err);
|
|
102
|
+
return textResult(`Error appending to note: ${err instanceof Error ? err.message : String(err)}`);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
// 3. prepend_to_note
|
|
106
|
+
server.registerTool("prepend_to_note", {
|
|
107
|
+
description: "Prepend content to a note, after frontmatter if present",
|
|
108
|
+
inputSchema: {
|
|
109
|
+
path: z.string().describe("Relative path to the note"),
|
|
110
|
+
content: z.string().describe("Content to prepend"),
|
|
111
|
+
},
|
|
112
|
+
}, async ({ path: notePath, content }) => {
|
|
113
|
+
try {
|
|
114
|
+
const resolvedPath = ensureMdExtension(notePath);
|
|
115
|
+
await prependToNote(vaultPath, resolvedPath, content);
|
|
116
|
+
return textResult(`Prepended content to '${resolvedPath}'.`);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
console.error("prepend_to_note error:", err);
|
|
120
|
+
return textResult(`Error prepending to note: ${err instanceof Error ? err.message : String(err)}`);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
// 4. update_frontmatter
|
|
124
|
+
server.registerTool("update_frontmatter", {
|
|
125
|
+
description: "Update frontmatter properties of a note without changing the body content",
|
|
126
|
+
inputSchema: {
|
|
127
|
+
path: z.string().describe("Relative path to the note"),
|
|
128
|
+
properties: z
|
|
129
|
+
.string()
|
|
130
|
+
.describe("JSON string of key-value pairs to set in frontmatter"),
|
|
131
|
+
},
|
|
132
|
+
}, async ({ path: notePath, properties }) => {
|
|
133
|
+
try {
|
|
134
|
+
const resolvedPath = ensureMdExtension(notePath);
|
|
135
|
+
let parsed;
|
|
136
|
+
try {
|
|
137
|
+
parsed = JSON.parse(properties);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return textResult("Error: Invalid JSON in properties parameter.");
|
|
141
|
+
}
|
|
142
|
+
const existing = await readNote(vaultPath, resolvedPath);
|
|
143
|
+
const updated = updateFrontmatter(existing, parsed);
|
|
144
|
+
await writeNote(vaultPath, resolvedPath, updated);
|
|
145
|
+
return textResult(`Updated frontmatter of '${resolvedPath}' with ${Object.keys(parsed).length} properties.`);
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
console.error("update_frontmatter error:", err);
|
|
149
|
+
return textResult(`Error updating frontmatter: ${err instanceof Error ? err.message : String(err)}`);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
// 5. create_daily_note
|
|
153
|
+
server.registerTool("create_daily_note", {
|
|
154
|
+
description: "Create today's daily note or a note for a specific date",
|
|
155
|
+
inputSchema: {
|
|
156
|
+
date: z
|
|
157
|
+
.string()
|
|
158
|
+
.optional()
|
|
159
|
+
.describe("Date in YYYY-MM-DD format (defaults to today)"),
|
|
160
|
+
content: z.string().optional().describe("Initial content for the daily note"),
|
|
161
|
+
templatePath: z
|
|
162
|
+
.string()
|
|
163
|
+
.optional()
|
|
164
|
+
.describe("Path to a template note to use (replaces {{date}} placeholder)"),
|
|
165
|
+
},
|
|
166
|
+
}, async ({ date, content, templatePath }) => {
|
|
167
|
+
try {
|
|
168
|
+
const config = getDailyNoteConfig(vaultPath);
|
|
169
|
+
const targetDate = date ? new Date(date + "T00:00:00") : new Date();
|
|
170
|
+
if (isNaN(targetDate.getTime())) {
|
|
171
|
+
return textResult("Error: Invalid date format. Use YYYY-MM-DD.");
|
|
172
|
+
}
|
|
173
|
+
const dateStr = formatDate(targetDate, config.format);
|
|
174
|
+
const folder = config.folder ? `${config.folder}/` : "";
|
|
175
|
+
const notePath = `${folder}${dateStr}.md`;
|
|
176
|
+
if (await noteExists(vaultPath, notePath)) {
|
|
177
|
+
return textResult(`Error: Daily note already exists at '${notePath}'.`);
|
|
178
|
+
}
|
|
179
|
+
let finalContent = content ?? "";
|
|
180
|
+
if (templatePath) {
|
|
181
|
+
try {
|
|
182
|
+
const templateContent = await readNote(vaultPath, templatePath);
|
|
183
|
+
finalContent = templateContent.replace(/\{\{date\}\}/g, dateStr);
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
return textResult(`Error reading template: ${err instanceof Error ? err.message : String(err)}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
await writeNote(vaultPath, notePath, finalContent);
|
|
190
|
+
return textResult(`Created daily note at '${notePath}'.`);
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
console.error("create_daily_note error:", err);
|
|
194
|
+
return textResult(`Error creating daily note: ${err instanceof Error ? err.message : String(err)}`);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
// 6. move_note
|
|
198
|
+
server.registerTool("move_note", {
|
|
199
|
+
description: "Move or rename a note to a new path",
|
|
200
|
+
inputSchema: {
|
|
201
|
+
oldPath: z.string().describe("Current relative path of the note"),
|
|
202
|
+
newPath: z.string().describe("New relative path for the note"),
|
|
203
|
+
},
|
|
204
|
+
}, async ({ oldPath, newPath }) => {
|
|
205
|
+
try {
|
|
206
|
+
const resolvedOld = ensureMdExtension(oldPath);
|
|
207
|
+
const resolvedNew = ensureMdExtension(newPath);
|
|
208
|
+
await moveNote(vaultPath, resolvedOld, resolvedNew);
|
|
209
|
+
return textResult(`Moved note from '${resolvedOld}' to '${resolvedNew}'.`);
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
console.error("move_note error:", err);
|
|
213
|
+
return textResult(`Error moving note: ${err instanceof Error ? err.message : String(err)}`);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
// 7. delete_note
|
|
217
|
+
server.registerTool("delete_note", {
|
|
218
|
+
description: "Delete a note (moves to vault trash by default)",
|
|
219
|
+
inputSchema: {
|
|
220
|
+
path: z.string().describe("Relative path to the note"),
|
|
221
|
+
permanent: z
|
|
222
|
+
.boolean()
|
|
223
|
+
.optional()
|
|
224
|
+
.default(false)
|
|
225
|
+
.describe("If true, permanently delete instead of moving to trash"),
|
|
226
|
+
},
|
|
227
|
+
}, async ({ path: notePath, permanent }) => {
|
|
228
|
+
try {
|
|
229
|
+
const resolvedPath = ensureMdExtension(notePath);
|
|
230
|
+
const useTrash = !permanent;
|
|
231
|
+
await deleteNote(vaultPath, resolvedPath, useTrash);
|
|
232
|
+
const method = useTrash ? "moved to trash" : "permanently deleted";
|
|
233
|
+
return textResult(`Note '${resolvedPath}' ${method}.`);
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
console.error("delete_note error:", err);
|
|
237
|
+
return textResult(`Error deleting note: ${err instanceof Error ? err.message : String(err)}`);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}
|
package/build/types.d.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export interface NoteMetadata {
|
|
2
|
+
title: string;
|
|
3
|
+
path: string;
|
|
4
|
+
relativePath: string;
|
|
5
|
+
created: Date | null;
|
|
6
|
+
modified: Date | null;
|
|
7
|
+
size: number;
|
|
8
|
+
tags: string[];
|
|
9
|
+
frontmatter: Record<string, unknown>;
|
|
10
|
+
aliases: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface VaultConfig {
|
|
13
|
+
vaultPath: string;
|
|
14
|
+
configPath?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface SearchResult {
|
|
17
|
+
path: string;
|
|
18
|
+
relativePath: string;
|
|
19
|
+
matches: SearchMatch[];
|
|
20
|
+
score: number;
|
|
21
|
+
}
|
|
22
|
+
export interface SearchMatch {
|
|
23
|
+
line: number;
|
|
24
|
+
content: string;
|
|
25
|
+
column: number;
|
|
26
|
+
}
|
|
27
|
+
export interface LinkInfo {
|
|
28
|
+
source: string;
|
|
29
|
+
target: string;
|
|
30
|
+
displayText?: string;
|
|
31
|
+
isEmbed: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface TagInfo {
|
|
34
|
+
tag: string;
|
|
35
|
+
count: number;
|
|
36
|
+
files: string[];
|
|
37
|
+
}
|
|
38
|
+
export interface CanvasNode {
|
|
39
|
+
id: string;
|
|
40
|
+
type: "text" | "file" | "link" | "group";
|
|
41
|
+
x: number;
|
|
42
|
+
y: number;
|
|
43
|
+
width: number;
|
|
44
|
+
height: number;
|
|
45
|
+
text?: string;
|
|
46
|
+
file?: string;
|
|
47
|
+
url?: string;
|
|
48
|
+
label?: string;
|
|
49
|
+
color?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface CanvasEdge {
|
|
52
|
+
id: string;
|
|
53
|
+
fromNode: string;
|
|
54
|
+
toNode: string;
|
|
55
|
+
fromSide?: string;
|
|
56
|
+
toSide?: string;
|
|
57
|
+
label?: string;
|
|
58
|
+
color?: string;
|
|
59
|
+
}
|
|
60
|
+
export interface CanvasData {
|
|
61
|
+
nodes: CanvasNode[];
|
|
62
|
+
edges: CanvasEdge[];
|
|
63
|
+
}
|
|
64
|
+
export interface DailyNoteConfig {
|
|
65
|
+
folder: string;
|
|
66
|
+
format: string;
|
|
67
|
+
template?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface GraphNeighbor {
|
|
70
|
+
path: string;
|
|
71
|
+
depth: number;
|
|
72
|
+
direction: "inbound" | "outbound" | "both";
|
|
73
|
+
}
|
|
74
|
+
export interface BrokenLink {
|
|
75
|
+
sourcePath: string;
|
|
76
|
+
targetLink: string;
|
|
77
|
+
line: number;
|
|
78
|
+
}
|
|
79
|
+
export interface OrphanNote {
|
|
80
|
+
path: string;
|
|
81
|
+
hasOutlinks: boolean;
|
|
82
|
+
hasBacklinks: boolean;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACzC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;CAC5C;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;CACvB"}
|
package/build/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "obsidian-mcp-pro",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "The most feature-complete MCP server for Obsidian vaults — search, read, write, tag, link analysis, graph traversal, canvas support, and more.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"obsidian-mcp-pro": "./build/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./build/index.js",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"start": "node build/index.js",
|
|
14
|
+
"prepublishOnly": "npm run build"
|
|
15
|
+
},
|
|
16
|
+
"keywords": ["mcp", "obsidian", "model-context-protocol", "ai", "claude", "llm", "knowledge-management", "notes", "markdown", "vault"],
|
|
17
|
+
"author": "rps321",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": ""
|
|
22
|
+
},
|
|
23
|
+
"files": ["build", "README.md", "LICENSE"],
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=18.0.0"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
29
|
+
"zod": "^3.24.0",
|
|
30
|
+
"gray-matter": "^4.0.3",
|
|
31
|
+
"glob": "^11.0.0"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/node": "^22.0.0",
|
|
35
|
+
"typescript": "^5.7.0"
|
|
36
|
+
}
|
|
37
|
+
}
|