@sunub/obsidian-mcp-server 0.2.0 → 0.3.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/README.md +201 -25
- package/build/cli/AppContainer.d.ts +1 -0
- package/build/cli/AppContainer.js +197 -0
- package/build/cli/AppContainer.js.map +1 -0
- package/build/cli/app.js +7 -0
- package/build/cli/app.js.map +1 -0
- package/build/cli/config/SettingContext.d.ts +1 -0
- package/build/cli/config/SettingContext.js +2 -0
- package/build/cli/config/SettingContext.js.map +1 -0
- package/build/cli/config/mcpServersConfig.d.ts +18 -0
- package/build/cli/config/mcpServersConfig.js +119 -0
- package/build/cli/config/mcpServersConfig.js.map +1 -0
- package/build/cli/config/settingSchema.d.ts +180 -0
- package/build/cli/config/settingSchema.js +128 -0
- package/build/cli/config/settingSchema.js.map +1 -0
- package/build/cli/context/InputContext.d.ts +12 -0
- package/build/cli/context/InputContext.js +10 -0
- package/build/cli/context/InputContext.js.map +1 -0
- package/build/cli/context/KeypressContext.d.ts +30 -0
- package/build/cli/context/KeypressContext.js +200 -0
- package/build/cli/context/KeypressContext.js.map +1 -0
- package/build/cli/context/KeypressContext.util.d.ts +7 -0
- package/build/cli/context/KeypressContext.util.js +474 -0
- package/build/cli/context/KeypressContext.util.js.map +1 -0
- package/build/cli/hooks/useAtCompletion.d.ts +12 -0
- package/build/cli/hooks/useAtCompletion.js +5 -0
- package/build/cli/hooks/useAtCompletion.js.map +1 -0
- package/build/cli/hooks/useCommandCompletion.d.ts +59 -0
- package/build/cli/hooks/useCommandCompletion.js +344 -0
- package/build/cli/hooks/useCommandCompletion.js.map +1 -0
- package/build/cli/hooks/useCompletion.d.ts +22 -0
- package/build/cli/hooks/useCompletion.js +84 -0
- package/build/cli/hooks/useCompletion.js.map +1 -0
- package/build/cli/hooks/useDispatcher.d.ts +6 -0
- package/build/cli/hooks/useDispatcher.js +286 -0
- package/build/cli/hooks/useDispatcher.js.map +1 -0
- package/build/cli/hooks/useFocus.d.ts +2 -0
- package/build/cli/hooks/useFocus.js +3 -0
- package/build/cli/hooks/useFocus.js.map +1 -0
- package/build/cli/hooks/useInputHistory.d.ts +24 -0
- package/build/cli/hooks/useInputHistory.js +159 -0
- package/build/cli/hooks/useInputHistory.js.map +1 -0
- package/build/cli/hooks/useKeyMatchers.d.ts +17 -0
- package/build/cli/hooks/useKeyMatchers.js +13 -0
- package/build/cli/hooks/useKeyMatchers.js.map +1 -0
- package/build/cli/hooks/useKeypress.d.ts +19 -0
- package/build/cli/hooks/useKeypress.js +28 -0
- package/build/cli/hooks/useKeypress.js.map +1 -0
- package/build/cli/hooks/useLlmStream.d.ts +12 -0
- package/build/cli/hooks/useLlmStream.js +365 -0
- package/build/cli/hooks/useLlmStream.js.map +1 -0
- package/build/cli/hooks/useMcpClient.d.ts +10 -0
- package/build/cli/hooks/useMcpClient.js +100 -0
- package/build/cli/hooks/useMcpClient.js.map +1 -0
- package/build/cli/hooks/useMcpManager.d.ts +22 -0
- package/build/cli/hooks/useMcpManager.js +86 -0
- package/build/cli/hooks/useMcpManager.js.map +1 -0
- package/build/cli/hooks/usePromptCompletion.d.ts +19 -0
- package/build/cli/hooks/usePromptCompletion.js +13 -0
- package/build/cli/hooks/usePromptCompletion.js.map +1 -0
- package/build/cli/hooks/useRagContext.d.ts +6 -0
- package/build/cli/hooks/useRagContext.js +83 -0
- package/build/cli/hooks/useRagContext.js.map +1 -0
- package/build/cli/hooks/useShellCompletion.d.ts +18 -0
- package/build/cli/hooks/useShellCompletion.js +10 -0
- package/build/cli/hooks/useShellCompletion.js.map +1 -0
- package/build/cli/hooks/useSlashCompletion.d.ts +21 -0
- package/build/cli/hooks/useSlashCompletion.js +11 -0
- package/build/cli/hooks/useSlashCompletion.js.map +1 -0
- package/build/cli/hooks/useTerminalSize.d.ts +9 -0
- package/build/cli/hooks/useTerminalSize.js +26 -0
- package/build/cli/hooks/useTerminalSize.js.map +1 -0
- package/build/cli/index.js +27 -0
- package/build/cli/index.js.map +1 -0
- package/build/cli/key/keyBindings.d.ts +152 -0
- package/build/cli/key/keyBindings.js +630 -0
- package/build/cli/key/keyBindings.js.map +1 -0
- package/build/cli/key/keyMatchers.d.ts +27 -0
- package/build/cli/key/keyMatchers.js +33 -0
- package/build/cli/key/keyMatchers.js.map +1 -0
- package/build/cli/key/text-buffer-bestcase.js +2754 -0
- package/build/cli/key/text-buffer-bestcase.js.map +1 -0
- package/build/cli/key/text-buffer.js +918 -0
- package/build/cli/key/text-buffer.js.map +1 -0
- package/build/cli/reference/HistoryItemDisplay.d.ts +23 -0
- package/build/cli/reference/HistoryItemDisplay.js +63 -0
- package/build/cli/reference/HistoryItemDisplay.js.map +1 -0
- package/build/cli/reference/InputContext.d.ts +17 -0
- package/build/cli/reference/InputContext.js +16 -0
- package/build/cli/reference/InputContext.js.map +1 -0
- package/build/cli/reference/KerypressContext.d.ts +37 -0
- package/build/cli/reference/KerypressContext.js +791 -0
- package/build/cli/reference/KerypressContext.js.map +1 -0
- package/build/cli/reference/MainContent.d.ts +6 -0
- package/build/cli/reference/MainContent.js +207 -0
- package/build/cli/reference/MainContent.js.map +1 -0
- package/build/cli/reference/UIStateContext.d.ts +188 -0
- package/build/cli/reference/UIStateContext.js +16 -0
- package/build/cli/reference/UIStateContext.js.map +1 -0
- package/build/cli/reference/useGeminiStream.d.ts +42 -0
- package/build/cli/reference/useGeminiStream.js +1404 -0
- package/build/cli/reference/useGeminiStream.js.map +1 -0
- package/build/cli/services/McpClientService.d.ts +32 -0
- package/build/cli/services/McpClientService.js +123 -0
- package/build/cli/services/McpClientService.js.map +1 -0
- package/build/cli/services/McpManager.d.ts +28 -0
- package/build/cli/services/McpManager.js +146 -0
- package/build/cli/services/McpManager.js.map +1 -0
- package/build/cli/theme/builtin/no-color.js +125 -0
- package/build/cli/theme/builtin/no-color.js.map +1 -0
- package/build/cli/theme/builtin/tokyonight-dark.js +146 -0
- package/build/cli/theme/builtin/tokyonight-dark.js.map +1 -0
- package/build/cli/theme/semantic-colors.js +19 -0
- package/build/cli/theme/semantic-colors.js.map +1 -0
- package/build/cli/theme/semantic-tokens.js +77 -0
- package/build/cli/theme/semantic-tokens.js.map +1 -0
- package/build/cli/theme/theme-manager.d.ts +32 -0
- package/build/cli/theme/theme-manager.js +150 -0
- package/build/cli/theme/theme-manager.js.map +1 -0
- package/build/cli/theme/theme.js +333 -0
- package/build/cli/theme/theme.js.map +1 -0
- package/build/cli/tmp.js +27 -0
- package/build/cli/tmp.js.map +1 -0
- package/build/cli/types.d.ts +72 -0
- package/build/cli/types.js +8 -0
- package/build/cli/types.js.map +1 -0
- package/build/cli/ui/ConnectionStatus.d.ts +13 -0
- package/build/cli/ui/ConnectionStatus.js +24 -0
- package/build/cli/ui/ConnectionStatus.js.map +1 -0
- package/build/cli/ui/HelpCommands.d.ts +5 -0
- package/build/cli/ui/HelpCommands.js +11 -0
- package/build/cli/ui/HelpCommands.js.map +1 -0
- package/build/cli/ui/HistoryItemDisplay.d.ts +9 -0
- package/build/cli/ui/HistoryItemDisplay.js +38 -0
- package/build/cli/ui/HistoryItemDisplay.js.map +1 -0
- package/build/cli/ui/InputPrompt-bestcase.d.ts +63 -0
- package/build/cli/ui/InputPrompt-bestcase.js +1301 -0
- package/build/cli/ui/InputPrompt-bestcase.js.map +1 -0
- package/build/cli/ui/InputPrompt.d.ts +12 -0
- package/build/cli/ui/InputPrompt.js +145 -0
- package/build/cli/ui/InputPrompt.js.map +1 -0
- package/build/cli/ui/InputPrompt.tmp.d.ts +7 -0
- package/build/cli/ui/InputPrompt.tmp.js +215 -0
- package/build/cli/ui/InputPrompt.tmp.js.map +1 -0
- package/build/cli/ui/MainContent.d.ts +10 -0
- package/build/cli/ui/MainContent.js +24 -0
- package/build/cli/ui/MainContent.js.map +1 -0
- package/build/cli/ui/MouseContext.d.ts +1 -0
- package/build/cli/ui/MouseContext.js +2 -0
- package/build/cli/ui/MouseContext.js.map +1 -0
- package/build/cli/ui/SuggestionsDisplay.d.ts +25 -0
- package/build/cli/ui/SuggestionsDisplay.js +45 -0
- package/build/cli/ui/SuggestionsDisplay.js.map +1 -0
- package/build/cli/ui/ThinkingIndicator.d.ts +2 -0
- package/build/cli/ui/ThinkingIndicator.js +16 -0
- package/build/cli/ui/ThinkingIndicator.js.map +1 -0
- package/build/cli/ui/layout/DefaultAppLayout.d.ts +2 -0
- package/build/cli/ui/layout/DefaultAppLayout.js +6 -0
- package/build/cli/ui/layout/DefaultAppLayout.js.map +1 -0
- package/build/cli/ui/shared/ExpandableText.d.ts +14 -0
- package/build/cli/ui/shared/ExpandableText.js +19 -0
- package/build/cli/ui/shared/ExpandableText.js.map +1 -0
- package/build/cli/utils/commandUtils.d.ts +11 -0
- package/build/cli/utils/commandUtils.js +16 -0
- package/build/cli/utils/commandUtils.js.map +1 -0
- package/build/cli/utils/debugLogger.d.ts +12 -0
- package/build/cli/utils/debugLogger.js +52 -0
- package/build/cli/utils/debugLogger.js.map +1 -0
- package/build/cli/utils/historyStorage.d.ts +13 -0
- package/build/cli/utils/historyStorage.js +64 -0
- package/build/cli/utils/historyStorage.js.map +1 -0
- package/build/cli/utils/textUtil.d.ts +68 -0
- package/build/cli/utils/textUtil.js +236 -0
- package/build/cli/utils/textUtil.js.map +1 -0
- package/build/config.js +31 -5
- package/build/config.js.map +1 -0
- package/build/db.js +55 -0
- package/build/db.js.map +1 -0
- package/build/index.js +4 -0
- package/build/index.js.map +1 -0
- package/build/tools/create_document_with_properties/index.d.ts +60 -0
- package/build/tools/create_document_with_properties/index.js +6 -0
- package/build/tools/create_document_with_properties/index.js.map +1 -0
- package/build/tools/create_document_with_properties/params.d.ts +66 -0
- package/build/tools/generate_property/index.js +6 -0
- package/build/tools/generate_property/index.js.map +1 -0
- package/build/tools/index.d.ts +184 -0
- package/build/tools/organize_attachments/index.js +6 -0
- package/build/tools/organize_attachments/index.js.map +1 -0
- package/build/tools/organize_attachments/params.d.ts +122 -0
- package/build/tools/vault/index.js +16 -2
- package/build/tools/vault/index.js.map +1 -0
- package/build/tools/vault/params.d.ts +115 -0
- package/build/tools/vault/types/collect_context.d.ts +1340 -0
- package/build/tools/vault/types/list_all.d.ts +387 -0
- package/build/tools/vault/types/read_specific.d.ts +297 -0
- package/build/tools/vault/types/search.d.ts +598 -0
- package/build/tools/vault/utils/actions/collect_context.js +26 -1
- package/build/tools/vault/utils/actions/collect_context.js.map +1 -0
- package/build/tools/vault/utils/actions/index_rag.js +27 -0
- package/build/tools/vault/utils/actions/index_rag.js.map +1 -0
- package/build/tools/vault/utils/actions/list_all.js +1 -0
- package/build/tools/vault/utils/actions/list_all.js.map +1 -0
- package/build/tools/vault/utils/actions/load_memory.js +23 -13
- package/build/tools/vault/utils/actions/load_memory.js.map +1 -0
- package/build/tools/vault/utils/actions/read.js +2 -1
- package/build/tools/vault/utils/actions/read.js.map +1 -0
- package/build/tools/vault/utils/actions/search.js +2 -1
- package/build/tools/vault/utils/actions/search.js.map +1 -0
- package/build/tools/vault/utils/actions/search_semantic.js +54 -0
- package/build/tools/vault/utils/actions/search_semantic.js.map +1 -0
- package/build/tools/vault/utils/actions/stats.js +1 -0
- package/build/tools/vault/utils/actions/stats.js.map +1 -0
- package/build/tools/vault/utils/document.js +1 -0
- package/build/tools/vault/utils/document.js.map +1 -0
- package/build/tools/write_property/index.d.ts +58 -0
- package/build/tools/write_property/index.js +6 -0
- package/build/tools/write_property/index.js.map +1 -0
- package/build/utils/DirectoryWalker.d.ts +6 -0
- package/build/utils/DirectoryWalker.js +7 -0
- package/build/utils/DirectoryWalker.js.map +1 -0
- package/build/utils/Indexer.d.ts +18 -0
- package/build/utils/Indexer.js +5 -9
- package/build/utils/Indexer.js.map +1 -0
- package/build/utils/LLMClient.d.ts +37 -0
- package/build/utils/LLMClient.js +82 -0
- package/build/utils/LLMClient.js.map +1 -0
- package/build/utils/RAGIndexer.d.ts +22 -0
- package/build/utils/RAGIndexer.js +206 -0
- package/build/utils/RAGIndexer.js.map +1 -0
- package/build/utils/RerankerClient.d.ts +27 -0
- package/build/utils/RerankerClient.js +69 -0
- package/build/utils/RerankerClient.js.map +1 -0
- package/build/utils/VaultManger/VaultManager.d.ts +34 -0
- package/build/utils/VaultManger/VaultManager.js +1 -0
- package/build/utils/VaultManger/VaultManager.js.map +1 -0
- package/build/utils/VaultManger/VaultPathError.d.ts +6 -0
- package/build/utils/VaultManger/VaultPathError.js +1 -0
- package/build/utils/VaultManger/VaultPathError.js.map +1 -0
- package/build/utils/VaultManger/index.d.ts +3 -0
- package/build/utils/VaultManger/index.js +1 -0
- package/build/utils/VaultManger/index.js.map +1 -0
- package/build/utils/VaultManger/types.d.ts +16 -0
- package/build/utils/VaultManger/types.js +1 -0
- package/build/utils/VaultManger/types.js.map +1 -0
- package/build/utils/VaultWatcher.d.ts +8 -0
- package/build/utils/VaultWatcher.js +96 -0
- package/build/utils/VaultWatcher.js.map +1 -0
- package/build/utils/VectorDB.d.ts +53 -0
- package/build/utils/VectorDB.js +243 -0
- package/build/utils/VectorDB.js.map +1 -0
- package/build/utils/createToolError.d.ts +2 -0
- package/build/utils/createToolError.js +1 -0
- package/build/utils/createToolError.js.map +1 -0
- package/build/utils/getVaultManager.d.ts +2 -0
- package/build/utils/getVaultManager.js +1 -0
- package/build/utils/getVaultManager.js.map +1 -0
- package/build/utils/processor/LinkExtractor.d.ts +2 -0
- package/build/utils/processor/LinkExtractor.js +1 -0
- package/build/utils/processor/LinkExtractor.js.map +1 -0
- package/build/utils/processor/MatterParser.d.ts +2 -0
- package/build/utils/processor/MatterParser.js +12 -3
- package/build/utils/processor/MatterParser.js.map +1 -0
- package/build/utils/processor/types.d.ts +100 -0
- package/package.json +28 -3
- package/build/server.js +0 -32
- package/build/tools/create_document_with_properties/params.js +0 -32
- package/build/tools/generate_property/params.js +0 -54
- package/build/tools/index.js +0 -12
- package/build/tools/organize_attachments/params.js +0 -60
- package/build/tools/organize_attachments/utils.js +0 -65
- package/build/tools/vault/metrics.js +0 -126
- package/build/tools/vault/params.js +0 -141
- package/build/tools/vault/types/collect_context.js +0 -102
- package/build/tools/vault/types/list_all.js +0 -52
- package/build/tools/vault/types/read_specific.js +0 -40
- package/build/tools/vault/types/search.js +0 -58
- package/build/tools/vault/utils/constants.js +0 -2
- package/build/tools/vault/utils/shared.js +0 -74
- package/build/tools/vault/utils.js +0 -6
- package/build/tools/write_property/params.js +0 -51
- package/build/utils/processor/types.js +0 -27
- package/build/utils/semaphore.js +0 -25
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { connect, Index } from "@lancedb/lancedb";
|
|
4
|
+
import * as arrow from "apache-arrow";
|
|
5
|
+
import { debugLogger } from "../cli/utils/debugLogger.js";
|
|
6
|
+
import state from "../config.js";
|
|
7
|
+
export const INDEX_VERSION = 5;
|
|
8
|
+
const VECTOR_DIM = 768;
|
|
9
|
+
const VaultDocumentSchema = new arrow.Schema([
|
|
10
|
+
new arrow.Field("id", new arrow.Utf8()),
|
|
11
|
+
new arrow.Field("filePath", new arrow.Utf8()),
|
|
12
|
+
new arrow.Field("fileName", new arrow.Utf8()),
|
|
13
|
+
new arrow.Field("chunkIndex", new arrow.Int32()),
|
|
14
|
+
new arrow.Field("content", new arrow.Utf8()),
|
|
15
|
+
new arrow.Field("context", new arrow.Utf8(), true),
|
|
16
|
+
new arrow.Field("vector", new arrow.FixedSizeList(VECTOR_DIM, new arrow.Field("item", new arrow.Float32(), true))),
|
|
17
|
+
new arrow.Field("metadata", new arrow.Struct([
|
|
18
|
+
new arrow.Field("title", new arrow.Utf8()),
|
|
19
|
+
new arrow.Field("date", new arrow.Utf8()),
|
|
20
|
+
new arrow.Field("tags", new arrow.Utf8()),
|
|
21
|
+
new arrow.Field("summary", new arrow.Utf8()),
|
|
22
|
+
new arrow.Field("slug", new arrow.Utf8()),
|
|
23
|
+
new arrow.Field("category", new arrow.Utf8()),
|
|
24
|
+
new arrow.Field("completed", new arrow.Bool()),
|
|
25
|
+
])),
|
|
26
|
+
]);
|
|
27
|
+
export class VectorDB {
|
|
28
|
+
dbPath;
|
|
29
|
+
tableName = "obsidian_chunks";
|
|
30
|
+
metaTableName = "obsidian_meta";
|
|
31
|
+
fileMetaTableName = "obsidian_file_meta";
|
|
32
|
+
db = null;
|
|
33
|
+
constructor() {
|
|
34
|
+
const vaultDotObsidian = path.join(state.vaultPath, ".obsidian");
|
|
35
|
+
this.dbPath = path.join(vaultDotObsidian, "vector_cache");
|
|
36
|
+
}
|
|
37
|
+
async ensureDir() {
|
|
38
|
+
try {
|
|
39
|
+
await fs.mkdir(this.dbPath, { recursive: true });
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
debugLogger.error("Error creating vector cache directory:", error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async connect() {
|
|
46
|
+
await this.ensureDir();
|
|
47
|
+
return await connect(this.dbPath);
|
|
48
|
+
}
|
|
49
|
+
async getDb() {
|
|
50
|
+
if (!this.db) {
|
|
51
|
+
this.db = await this.connect();
|
|
52
|
+
}
|
|
53
|
+
return this.db;
|
|
54
|
+
}
|
|
55
|
+
async getTable() {
|
|
56
|
+
const db = await this.getDb();
|
|
57
|
+
const tableNames = await db.tableNames();
|
|
58
|
+
if (!tableNames.includes(this.tableName)) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return await db.openTable(this.tableName);
|
|
62
|
+
}
|
|
63
|
+
async checkAndMigrateIfNeeded() {
|
|
64
|
+
const db = await this.connect();
|
|
65
|
+
const tableNames = await db.tableNames();
|
|
66
|
+
const currentEmbedModel = state.llmEmbeddingModel;
|
|
67
|
+
if (!tableNames.includes(this.metaTableName)) {
|
|
68
|
+
const tablesToDrop = [this.tableName, this.fileMetaTableName];
|
|
69
|
+
for (const t of tablesToDrop) {
|
|
70
|
+
if (tableNames.includes(t)) {
|
|
71
|
+
debugLogger.error(`[VectorDB] No meta table found but ${t} exists — dropping stale index.`);
|
|
72
|
+
await db.dropTable(t);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
await this.writeMetadata(db);
|
|
76
|
+
this.db = null;
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
const meta = await this.readMetadata(db);
|
|
80
|
+
const storedVersion = Number.parseInt(meta["index_version"] ?? "0", 10);
|
|
81
|
+
const storedModel = meta["embed_model"] ?? "";
|
|
82
|
+
if (storedVersion !== INDEX_VERSION || storedModel !== currentEmbedModel) {
|
|
83
|
+
debugLogger.error(`[VectorDB] Index version mismatch (stored: v${storedVersion}/${storedModel}, current: v${INDEX_VERSION}/${currentEmbedModel}) — rebuilding index.`);
|
|
84
|
+
const tablesToDrop = [
|
|
85
|
+
this.tableName,
|
|
86
|
+
this.metaTableName,
|
|
87
|
+
this.fileMetaTableName,
|
|
88
|
+
];
|
|
89
|
+
for (const t of tablesToDrop) {
|
|
90
|
+
if (tableNames.includes(t)) {
|
|
91
|
+
await db.dropTable(t);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
await this.writeMetadata(db);
|
|
95
|
+
this.db = null;
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
debugLogger.info(`[VectorDB] Index is up-to-date (v${INDEX_VERSION}, ${currentEmbedModel}).`);
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
async readMetadata(db) {
|
|
102
|
+
try {
|
|
103
|
+
const table = await db.openTable(this.metaTableName);
|
|
104
|
+
const rows = (await table.query().toArray());
|
|
105
|
+
const result = {};
|
|
106
|
+
for (const row of rows) {
|
|
107
|
+
result[row.key] = row.value;
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return {};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async writeMetadata(db) {
|
|
116
|
+
const records = [
|
|
117
|
+
{ key: "index_version", value: String(INDEX_VERSION) },
|
|
118
|
+
{ key: "embed_model", value: state.llmEmbeddingModel },
|
|
119
|
+
];
|
|
120
|
+
await db.createTable(this.metaTableName, records, { mode: "overwrite" });
|
|
121
|
+
}
|
|
122
|
+
async createVectorIndex() {
|
|
123
|
+
const table = await this.getTable();
|
|
124
|
+
if (!table) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const rowCount = await table.countRows();
|
|
128
|
+
if (rowCount < 256) {
|
|
129
|
+
console.error(`[VectorDB] Skipping index creation: only ${rowCount} rows (need 256+)`);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const numPartitions = Math.max(2, Math.floor(Math.sqrt(rowCount)));
|
|
133
|
+
await table.createIndex("vector", {
|
|
134
|
+
config: Index.ivfPq({
|
|
135
|
+
numPartitions,
|
|
136
|
+
numSubVectors: 96,
|
|
137
|
+
distanceType: "cosine",
|
|
138
|
+
}),
|
|
139
|
+
});
|
|
140
|
+
debugLogger.info(`[VectorDB] Created vector index with ${numPartitions} partitions for ${rowCount} rows.`);
|
|
141
|
+
}
|
|
142
|
+
async upsertChunks(records) {
|
|
143
|
+
if (!this.db) {
|
|
144
|
+
this.db = await this.connect();
|
|
145
|
+
}
|
|
146
|
+
const tableNames = await this.db.tableNames();
|
|
147
|
+
if (!tableNames.includes(this.tableName)) {
|
|
148
|
+
await this.db.createEmptyTable(this.tableName, VaultDocumentSchema);
|
|
149
|
+
}
|
|
150
|
+
const table = await this.db.openTable(this.tableName);
|
|
151
|
+
const filePaths = Array.from(new Set(records.map((r) => r.filePath)));
|
|
152
|
+
const inClause = filePaths
|
|
153
|
+
.map((fp) => `'${fp.replace(/'/g, "''")}'`)
|
|
154
|
+
.join(", ");
|
|
155
|
+
await table.delete(`filePath IN (${inClause})`);
|
|
156
|
+
await table.add(records);
|
|
157
|
+
}
|
|
158
|
+
async updateFileMeta(filePath, mtime) {
|
|
159
|
+
if (!this.db) {
|
|
160
|
+
this.db = await this.connect();
|
|
161
|
+
}
|
|
162
|
+
const tableNames = await this.db.tableNames();
|
|
163
|
+
if (!tableNames.includes(this.fileMetaTableName)) {
|
|
164
|
+
await this.db.createTable(this.fileMetaTableName, [{ filePath, mtime }]);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const table = await this.db.openTable(this.fileMetaTableName);
|
|
168
|
+
await table.delete(`filePath = '${filePath.replace(/'/g, "''")}'`);
|
|
169
|
+
await table.add([{ filePath, mtime }]);
|
|
170
|
+
}
|
|
171
|
+
async updateFileMetaBatch(entries) {
|
|
172
|
+
if (entries.length === 0)
|
|
173
|
+
return;
|
|
174
|
+
if (!this.db) {
|
|
175
|
+
this.db = await this.connect();
|
|
176
|
+
}
|
|
177
|
+
const tableNames = await this.db.tableNames();
|
|
178
|
+
if (!tableNames.includes(this.fileMetaTableName)) {
|
|
179
|
+
await this.db.createTable(this.fileMetaTableName, entries);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const table = await this.db.openTable(this.fileMetaTableName);
|
|
183
|
+
const inClause = entries
|
|
184
|
+
.map((e) => `'${e.filePath.replace(/'/g, "''")}'`)
|
|
185
|
+
.join(", ");
|
|
186
|
+
await table.delete(`filePath IN (${inClause})`);
|
|
187
|
+
await table.add(entries);
|
|
188
|
+
}
|
|
189
|
+
async getFileMtime(filePath) {
|
|
190
|
+
if (!this.db) {
|
|
191
|
+
this.db = await this.connect();
|
|
192
|
+
}
|
|
193
|
+
const tableNames = await this.db.tableNames();
|
|
194
|
+
if (!tableNames.includes(this.fileMetaTableName))
|
|
195
|
+
return null;
|
|
196
|
+
const table = await this.db.openTable(this.fileMetaTableName);
|
|
197
|
+
const rows = (await table
|
|
198
|
+
.query()
|
|
199
|
+
.where(`filePath = '${filePath.replace(/'/g, "''")}'`)
|
|
200
|
+
.toArray());
|
|
201
|
+
return rows.length > 0 ? rows[0].mtime : null;
|
|
202
|
+
}
|
|
203
|
+
async deleteByFilePath(filePath) {
|
|
204
|
+
const table = await this.getTable();
|
|
205
|
+
if (table) {
|
|
206
|
+
await table.delete(`filePath = '${filePath.replace(/'/g, "''")}'`);
|
|
207
|
+
}
|
|
208
|
+
if (!this.db) {
|
|
209
|
+
this.db = await this.connect();
|
|
210
|
+
}
|
|
211
|
+
if ((await this.db.tableNames()).includes(this.fileMetaTableName)) {
|
|
212
|
+
const fileMetaTable = await this.db.openTable(this.fileMetaTableName);
|
|
213
|
+
await fileMetaTable.delete(`filePath = '${filePath.replace(/'/g, "''")}'`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async hasFile(filePath) {
|
|
217
|
+
const table = await this.getTable();
|
|
218
|
+
if (!table)
|
|
219
|
+
return false;
|
|
220
|
+
try {
|
|
221
|
+
const count = await table.countRows(`filePath = '${filePath.replace(/'/g, "''")}'`);
|
|
222
|
+
return count > 0;
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
async search(queryVector, limit = 5) {
|
|
229
|
+
const table = await this.getTable();
|
|
230
|
+
if (!table)
|
|
231
|
+
return [];
|
|
232
|
+
const results = await table
|
|
233
|
+
.vectorSearch(queryVector)
|
|
234
|
+
.distanceType("cosine")
|
|
235
|
+
.nprobes(20)
|
|
236
|
+
.refineFactor(1)
|
|
237
|
+
.limit(limit)
|
|
238
|
+
.toArray();
|
|
239
|
+
return results;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
export const vectorDB = new VectorDB();
|
|
243
|
+
//# sourceMappingURL=VectorDB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VectorDB.js","sourceRoot":"","sources":["../../src/utils/VectorDB.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createToolError.js","sourceRoot":"","sources":["../../src/utils/createToolError.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAC9B,KAAa,EACb,UAAmB;IAEnB,MAAM,OAAO,GAA2C,EAAE,KAAK,EAAE,CAAC;IAClE,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAED,OAAO;QACN,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACD;KACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getVaultManager.js","sourceRoot":"","sources":["../../src/utils/getVaultManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,IAAI,QAAQ,GAAwB,IAAI,CAAC;AAEzC,MAAM,UAAU,qBAAqB;IACpC,IAAI,QAAQ,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACnE,CAAC;IAED,QAAQ,GAAG,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkExtractor.js","sourceRoot":"","sources":["../../../src/utils/processor/LinkExtractor.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAChD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,aAAa,GAAG,oBAAoB,CAAC;IAC3C,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;IAE/C,IAAI,KAA6B,CAAC;IAClC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;QACvB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;QACvB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe;IACnD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,yBAAyB,CAAC;IAEhD,IAAI,KAA6B,CAAC;IAClC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;QACvB,gDAAgD;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { basename } from "node:path";
|
|
1
2
|
import matter from "gray-matter";
|
|
2
3
|
import { FrontMatterSchema } from "./types.js";
|
|
3
|
-
export function parse(text) {
|
|
4
|
+
export function parse(filePath, birthTime, text) {
|
|
4
5
|
try {
|
|
5
6
|
const parsed = matter(text);
|
|
6
7
|
const frontmatter = FrontMatterSchema.parse(parsed.data);
|
|
@@ -10,10 +11,18 @@ export function parse(text) {
|
|
|
10
11
|
};
|
|
11
12
|
}
|
|
12
13
|
catch {
|
|
13
|
-
console.warn("Frontmatter 파싱에 실패했습니다. 전체를 내용으로 간주합니다.");
|
|
14
14
|
return {
|
|
15
|
-
frontmatter: FrontMatterSchema.parse({
|
|
15
|
+
frontmatter: FrontMatterSchema.parse({
|
|
16
|
+
title: basename(filePath, ".md"),
|
|
17
|
+
date: birthTime,
|
|
18
|
+
category: "any",
|
|
19
|
+
tags: [""],
|
|
20
|
+
summary: text.slice(0, 200).replace(/\n/g, " "),
|
|
21
|
+
slug: basename(filePath, ".md").toLowerCase().replace(/\s+/g, "-"),
|
|
22
|
+
completed: false,
|
|
23
|
+
}),
|
|
16
24
|
content: text,
|
|
17
25
|
};
|
|
18
26
|
}
|
|
19
27
|
}
|
|
28
|
+
//# sourceMappingURL=MatterParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MatterParser.js","sourceRoot":"","sources":["../../../src/utils/processor/MatterParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,UAAU,KAAK,CACpB,QAAgB,EAChB,SAAiB,EACjB,IAAY;IAEZ,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO;YACN,WAAW;YACX,OAAO,EAAE,MAAM,CAAC,OAAO;SACvB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO;YACN,WAAW,EAAE,iBAAiB,CAAC,KAAK,CAAC;gBACpC,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAChC,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,CAAC,EAAE,CAAC;gBACV,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC/C,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;gBAClE,SAAS,EAAE,KAAK;aAChB,CAAC;YACF,OAAO,EAAE,IAAI;SACb,CAAC;IACH,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
declare const PostCategorySchema: z.ZodOptional<z.ZodString>;
|
|
3
|
+
export declare const FrontMatterSchema: z.ZodObject<{
|
|
4
|
+
title: z.ZodString;
|
|
5
|
+
date: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate]>>;
|
|
6
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
7
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
8
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
9
|
+
category: z.ZodOptional<z.ZodString>;
|
|
10
|
+
completed: z.ZodOptional<z.ZodBoolean>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
title: string;
|
|
13
|
+
date?: string | Date | undefined;
|
|
14
|
+
tags?: string[] | undefined;
|
|
15
|
+
summary?: string | undefined;
|
|
16
|
+
slug?: string | undefined;
|
|
17
|
+
category?: string | undefined;
|
|
18
|
+
completed?: boolean | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
title: string;
|
|
21
|
+
date?: string | Date | undefined;
|
|
22
|
+
tags?: string[] | undefined;
|
|
23
|
+
summary?: string | undefined;
|
|
24
|
+
slug?: string | undefined;
|
|
25
|
+
category?: string | undefined;
|
|
26
|
+
completed?: boolean | undefined;
|
|
27
|
+
}>;
|
|
28
|
+
type FrontMatter = z.infer<typeof FrontMatterSchema>;
|
|
29
|
+
export interface ParsedMatter {
|
|
30
|
+
frontmatter: FrontMatter;
|
|
31
|
+
content: string;
|
|
32
|
+
}
|
|
33
|
+
export interface DocumentIndex {
|
|
34
|
+
filePath: string;
|
|
35
|
+
frontmatter: FrontMatter;
|
|
36
|
+
contentLength: number;
|
|
37
|
+
imageLinks: string[];
|
|
38
|
+
documentLinks: string[];
|
|
39
|
+
}
|
|
40
|
+
export declare const DocumentIndexSchema: z.ZodObject<{
|
|
41
|
+
filePath: z.ZodString;
|
|
42
|
+
frontmatter: z.ZodObject<{
|
|
43
|
+
title: z.ZodString;
|
|
44
|
+
date: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodDate]>>;
|
|
45
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
46
|
+
summary: z.ZodOptional<z.ZodString>;
|
|
47
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
48
|
+
category: z.ZodOptional<z.ZodString>;
|
|
49
|
+
completed: z.ZodOptional<z.ZodBoolean>;
|
|
50
|
+
}, "strip", z.ZodTypeAny, {
|
|
51
|
+
title: string;
|
|
52
|
+
date?: string | Date | undefined;
|
|
53
|
+
tags?: string[] | undefined;
|
|
54
|
+
summary?: string | undefined;
|
|
55
|
+
slug?: string | undefined;
|
|
56
|
+
category?: string | undefined;
|
|
57
|
+
completed?: boolean | undefined;
|
|
58
|
+
}, {
|
|
59
|
+
title: string;
|
|
60
|
+
date?: string | Date | undefined;
|
|
61
|
+
tags?: string[] | undefined;
|
|
62
|
+
summary?: string | undefined;
|
|
63
|
+
slug?: string | undefined;
|
|
64
|
+
category?: string | undefined;
|
|
65
|
+
completed?: boolean | undefined;
|
|
66
|
+
}>;
|
|
67
|
+
contentLength: z.ZodNumber;
|
|
68
|
+
imageLinks: z.ZodArray<z.ZodString, "many">;
|
|
69
|
+
documentLinks: z.ZodArray<z.ZodString, "many">;
|
|
70
|
+
}, "strip", z.ZodTypeAny, {
|
|
71
|
+
frontmatter: {
|
|
72
|
+
title: string;
|
|
73
|
+
date?: string | Date | undefined;
|
|
74
|
+
tags?: string[] | undefined;
|
|
75
|
+
summary?: string | undefined;
|
|
76
|
+
slug?: string | undefined;
|
|
77
|
+
category?: string | undefined;
|
|
78
|
+
completed?: boolean | undefined;
|
|
79
|
+
};
|
|
80
|
+
contentLength: number;
|
|
81
|
+
filePath: string;
|
|
82
|
+
imageLinks: string[];
|
|
83
|
+
documentLinks: string[];
|
|
84
|
+
}, {
|
|
85
|
+
frontmatter: {
|
|
86
|
+
title: string;
|
|
87
|
+
date?: string | Date | undefined;
|
|
88
|
+
tags?: string[] | undefined;
|
|
89
|
+
summary?: string | undefined;
|
|
90
|
+
slug?: string | undefined;
|
|
91
|
+
category?: string | undefined;
|
|
92
|
+
completed?: boolean | undefined;
|
|
93
|
+
};
|
|
94
|
+
contentLength: number;
|
|
95
|
+
filePath: string;
|
|
96
|
+
imageLinks: string[];
|
|
97
|
+
documentLinks: string[];
|
|
98
|
+
}>;
|
|
99
|
+
export { PostCategorySchema };
|
|
100
|
+
export type { FrontMatter };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sunub/obsidian-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "A server for the Obsidian Model Context Protocol.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"obsidian",
|
|
@@ -36,19 +36,44 @@
|
|
|
36
36
|
"author": "sunub",
|
|
37
37
|
"license": "ISC",
|
|
38
38
|
"dependencies": {
|
|
39
|
+
"@lancedb/lancedb": "^0.27.2",
|
|
40
|
+
"@langchain/core": "^1.1.39",
|
|
41
|
+
"@langchain/textsplitters": "^1.0.1",
|
|
39
42
|
"@modelcontextprotocol/sdk": "^1.17.5",
|
|
43
|
+
"@types/tinycolor2": "^1.4.6",
|
|
44
|
+
"ansi-regex": "^6.2.2",
|
|
45
|
+
"apache-arrow": "^18.1.0",
|
|
46
|
+
"chalk": "^5.6.2",
|
|
47
|
+
"chokidar": "^5.0.0",
|
|
48
|
+
"clipboardy": "^5.3.1",
|
|
40
49
|
"commander": "^14.0.2",
|
|
41
|
-
"
|
|
50
|
+
"comment-json": "^5.0.0",
|
|
51
|
+
"dotenv": "^17.4.2",
|
|
42
52
|
"gray-matter": "^4.0.3",
|
|
53
|
+
"ink": "^7.0.0",
|
|
54
|
+
"js-tiktoken": "^1.0.21",
|
|
55
|
+
"mnemonist": "^0.40.3",
|
|
56
|
+
"ollama": "^0.6.3",
|
|
57
|
+
"ora": "^9.3.0",
|
|
58
|
+
"prompts": "^2.4.2",
|
|
59
|
+
"react": "^19.2.5",
|
|
60
|
+
"string-width": "^8.2.0",
|
|
61
|
+
"strip-ansi": "^7.2.0",
|
|
62
|
+
"tinycolor2": "^1.6.0",
|
|
63
|
+
"tinygradient": "^2.0.1",
|
|
64
|
+
"wrap-ansi": "^10.0.0",
|
|
65
|
+
"yargs": "^18.0.0",
|
|
43
66
|
"zod": "^3.25.76"
|
|
44
67
|
},
|
|
45
68
|
"devDependencies": {
|
|
46
69
|
"@biomejs/biome": "2.3.8",
|
|
47
70
|
"@types/node": "^24.3.1",
|
|
71
|
+
"@types/react": "^19.2.14",
|
|
72
|
+
"@types/yargs": "^17.0.35",
|
|
48
73
|
"jsdom": "^27.0.0",
|
|
49
74
|
"shx": "^0.4.0",
|
|
50
75
|
"tsc-alias": "^1.8.16",
|
|
51
|
-
"tsx": "^4.
|
|
76
|
+
"tsx": "^4.21.0",
|
|
52
77
|
"typescript": "^5.9.2",
|
|
53
78
|
"vite-tsconfig-paths": "^5.1.4",
|
|
54
79
|
"vitest": "^3.2.4"
|
package/build/server.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
import pkg from "../package.json" with { type: "json" };
|
|
3
|
-
import tools from "./tools/index.js";
|
|
4
|
-
export default function createMcpServer() {
|
|
5
|
-
const mcpServer = new McpServer({
|
|
6
|
-
version: pkg.version,
|
|
7
|
-
name: "obsidian-mcp-server",
|
|
8
|
-
title: "Obsidian MCP Server",
|
|
9
|
-
}, {
|
|
10
|
-
capabilities: {
|
|
11
|
-
logging: {},
|
|
12
|
-
tools: { listChanged: false },
|
|
13
|
-
},
|
|
14
|
-
instructions: `
|
|
15
|
-
This server provides access to Obsidian vault documents and related tools.
|
|
16
|
-
|
|
17
|
-
Available tools:
|
|
18
|
-
- vault: Search, read, and list markdown documents in the vault
|
|
19
|
-
- generate_property: Generate frontmatter property suggestions from document content
|
|
20
|
-
- write_property: Write frontmatter properties to a markdown file
|
|
21
|
-
- create_document_with_properties: Two-step workflow for AI-generated properties and write
|
|
22
|
-
- organize_attachments: Move linked attachments and update markdown links
|
|
23
|
-
|
|
24
|
-
Environment requirements:
|
|
25
|
-
- VAULT_DIR_PATH: Path to your Obsidian vault directory
|
|
26
|
-
`,
|
|
27
|
-
});
|
|
28
|
-
for (const tool of Object.values(tools)) {
|
|
29
|
-
tool.register(mcpServer);
|
|
30
|
-
}
|
|
31
|
-
return mcpServer;
|
|
32
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { obsidianPropertyOutputSchema } from "../generate_property/params.js";
|
|
3
|
-
// input properties
|
|
4
|
-
const sourcePath = z
|
|
5
|
-
.string()
|
|
6
|
-
.describe('The path to the source markdown file to read and analyze (e.g., "draft/my-article.md")');
|
|
7
|
-
const outputPath = z
|
|
8
|
-
.string()
|
|
9
|
-
.optional()
|
|
10
|
-
.describe("The path where the processed file with properties will be saved. If not provided, the source file will be updated in place.");
|
|
11
|
-
const overwrite = z
|
|
12
|
-
.boolean()
|
|
13
|
-
.default(false)
|
|
14
|
-
.describe("If set to true, existing properties will be overwritten by the AI-generated content. Default: false.");
|
|
15
|
-
const aiGeneratedProperties = obsidianPropertyOutputSchema
|
|
16
|
-
.optional()
|
|
17
|
-
.describe("AI-generated properties based on content analysis. If provided, these will be used instead of internal analysis.");
|
|
18
|
-
const quiet = z
|
|
19
|
-
.boolean()
|
|
20
|
-
.optional()
|
|
21
|
-
.default(false)
|
|
22
|
-
.describe("If true, the final write operation will return a minimal success message.");
|
|
23
|
-
// input schema
|
|
24
|
-
export const createDocumentWithPropertiesParamsSchema = z
|
|
25
|
-
.object({
|
|
26
|
-
sourcePath: sourcePath,
|
|
27
|
-
outputPath: outputPath,
|
|
28
|
-
overwrite: overwrite.optional(),
|
|
29
|
-
aiGeneratedProperties: aiGeneratedProperties.optional(),
|
|
30
|
-
quiet: quiet,
|
|
31
|
-
})
|
|
32
|
-
.describe("Parameters for creating or updating a document with automatically generated properties");
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
// input properties
|
|
3
|
-
const obsidianGenerateInputFilename = z
|
|
4
|
-
.string()
|
|
5
|
-
.describe('The name or path of the file to analyze and add properties to (e.g., "my-first-post.md")');
|
|
6
|
-
const obsidianGenerateInputOverwrite = z
|
|
7
|
-
.boolean()
|
|
8
|
-
.default(true)
|
|
9
|
-
.describe("If set to true, existing properties will be overwritten by the AI-generated content. Default: false.");
|
|
10
|
-
// input schema
|
|
11
|
-
export const obsidianPropertyQueryParamsSchema = z
|
|
12
|
-
.object({
|
|
13
|
-
filename: obsidianGenerateInputFilename,
|
|
14
|
-
overwrite: obsidianGenerateInputOverwrite.optional(),
|
|
15
|
-
})
|
|
16
|
-
.describe("Parameters for generating or updating Obsidian document properties");
|
|
17
|
-
// output properties
|
|
18
|
-
export const obsidianCssClassesProperty = z
|
|
19
|
-
.array(z.string())
|
|
20
|
-
.describe("List of CSS classes associated with the document");
|
|
21
|
-
export const obsidianTagsProperty = z
|
|
22
|
-
.array(z.string())
|
|
23
|
-
.describe("List of tags associated with the document");
|
|
24
|
-
export const obsidianTitleProperty = z
|
|
25
|
-
.string()
|
|
26
|
-
.describe("Title of the document");
|
|
27
|
-
export const obsidianDateProperty = z
|
|
28
|
-
.string()
|
|
29
|
-
.describe("Creation date of the document in ISO 8601 format");
|
|
30
|
-
export const obsidianSummaryProperty = z
|
|
31
|
-
.string()
|
|
32
|
-
.describe("Brief summary or abstract of the document");
|
|
33
|
-
export const obsidianSlugProperty = z
|
|
34
|
-
.string()
|
|
35
|
-
.describe("URL-friendly identifier for the document");
|
|
36
|
-
export const obsidianCategoryProperty = z
|
|
37
|
-
.string()
|
|
38
|
-
.describe("Category or classification of the document");
|
|
39
|
-
export const obsidianCompletedProperty = z
|
|
40
|
-
.boolean()
|
|
41
|
-
.describe("Indicates whether a task or item is completed");
|
|
42
|
-
// output schema
|
|
43
|
-
export const obsidianPropertyOutputSchema = z
|
|
44
|
-
.object({
|
|
45
|
-
cssclasses: obsidianCssClassesProperty.optional(),
|
|
46
|
-
tags: obsidianTagsProperty.optional(),
|
|
47
|
-
title: obsidianTitleProperty.optional(),
|
|
48
|
-
date: obsidianDateProperty.optional(),
|
|
49
|
-
summary: obsidianSummaryProperty.optional(),
|
|
50
|
-
slug: obsidianSlugProperty.optional(),
|
|
51
|
-
category: obsidianCategoryProperty.optional(),
|
|
52
|
-
completed: obsidianCompletedProperty.optional(),
|
|
53
|
-
})
|
|
54
|
-
.describe("Extracted properties from the Obsidian document content");
|
package/build/tools/index.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import CreateDocumentWithPropertyTool from "./create_document_with_properties/index.js";
|
|
2
|
-
import GenerateObsidianVaultPropertiesTool from "./generate_property/index.js";
|
|
3
|
-
import OrganizeAttachmentsTool from "./organize_attachments/index.js";
|
|
4
|
-
import ObsidianVaultTool from "./vault/index.js";
|
|
5
|
-
import WriteObsidianPropertyTool from "./write_property/index.js";
|
|
6
|
-
export default {
|
|
7
|
-
ObsidianVaultTool,
|
|
8
|
-
GenerateObsidianVaultPropertiesTool,
|
|
9
|
-
WriteObsidianPropertyTool,
|
|
10
|
-
CreateDocumentWithPropertyTool,
|
|
11
|
-
OrganizeAttachmentsTool,
|
|
12
|
-
};
|