@sunub/obsidian-mcp-server 0.3.15 → 0.3.17

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 (224) hide show
  1. package/{build → dist}/config.d.ts +1 -1
  2. package/dist/config.d.ts.map +1 -0
  3. package/dist/config.js +59 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/db.js +58 -0
  6. package/dist/db.js.map +1 -0
  7. package/dist/index.js +52 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/server.js +42 -0
  10. package/dist/server.js.map +1 -0
  11. package/dist/setup.js +114 -0
  12. package/dist/setup.js.map +1 -0
  13. package/{build → dist}/tools/create_document_with_properties/index.d.ts +1 -1
  14. package/dist/tools/create_document_with_properties/index.js +115 -0
  15. package/dist/tools/create_document_with_properties/index.js.map +1 -0
  16. package/{build → dist}/tools/create_document_with_properties/params.d.ts +2 -2
  17. package/dist/tools/create_document_with_properties/params.js +33 -0
  18. package/dist/tools/create_document_with_properties/params.js.map +1 -0
  19. package/{build → dist}/tools/generate_property/index.d.ts +1 -1
  20. package/dist/tools/generate_property/index.js +86 -0
  21. package/dist/tools/generate_property/index.js.map +1 -0
  22. package/dist/tools/generate_property/params.js +55 -0
  23. package/dist/tools/generate_property/params.js.map +1 -0
  24. package/dist/tools/index.js +13 -0
  25. package/dist/tools/index.js.map +1 -0
  26. package/{build → dist}/tools/organize_attachments/index.d.ts +1 -1
  27. package/dist/tools/organize_attachments/index.js +86 -0
  28. package/dist/tools/organize_attachments/index.js.map +1 -0
  29. package/dist/tools/organize_attachments/params.js +61 -0
  30. package/dist/tools/organize_attachments/params.js.map +1 -0
  31. package/{build → dist}/tools/organize_attachments/utils.d.ts +1 -1
  32. package/dist/tools/organize_attachments/utils.js +66 -0
  33. package/dist/tools/organize_attachments/utils.js.map +1 -0
  34. package/{build → dist}/tools/vault/index.d.ts +1 -1
  35. package/dist/tools/vault/index.js +104 -0
  36. package/dist/tools/vault/index.js.map +1 -0
  37. package/dist/tools/vault/metrics.js +130 -0
  38. package/dist/tools/vault/metrics.js.map +1 -0
  39. package/{build → dist}/tools/vault/params.d.ts +2 -2
  40. package/dist/tools/vault/params.js +148 -0
  41. package/dist/tools/vault/params.js.map +1 -0
  42. package/dist/tools/vault/types/collect_context.js +103 -0
  43. package/dist/tools/vault/types/collect_context.js.map +1 -0
  44. package/dist/tools/vault/types/list_all.js +53 -0
  45. package/dist/tools/vault/types/list_all.js.map +1 -0
  46. package/dist/tools/vault/types/read_specific.js +41 -0
  47. package/dist/tools/vault/types/read_specific.js.map +1 -0
  48. package/dist/tools/vault/types/search.js +59 -0
  49. package/dist/tools/vault/types/search.js.map +1 -0
  50. package/dist/tools/vault/utils/actions/collect_context.d.ts +5 -0
  51. package/dist/tools/vault/utils/actions/collect_context.js +765 -0
  52. package/dist/tools/vault/utils/actions/collect_context.js.map +1 -0
  53. package/dist/tools/vault/utils/actions/index_rag.js +27 -0
  54. package/dist/tools/vault/utils/actions/index_rag.js.map +1 -0
  55. package/dist/tools/vault/utils/actions/list_all.d.ts +5 -0
  56. package/dist/tools/vault/utils/actions/list_all.js +43 -0
  57. package/dist/tools/vault/utils/actions/list_all.js.map +1 -0
  58. package/dist/tools/vault/utils/actions/load_memory.d.ts +5 -0
  59. package/dist/tools/vault/utils/actions/load_memory.js +186 -0
  60. package/dist/tools/vault/utils/actions/load_memory.js.map +1 -0
  61. package/{build → dist}/tools/vault/utils/actions/read.d.ts +2 -2
  62. package/dist/tools/vault/utils/actions/read.js +68 -0
  63. package/dist/tools/vault/utils/actions/read.js.map +1 -0
  64. package/{build → dist}/tools/vault/utils/actions/search.d.ts +2 -2
  65. package/dist/tools/vault/utils/actions/search.js +104 -0
  66. package/dist/tools/vault/utils/actions/search.js.map +1 -0
  67. package/{build → dist}/tools/vault/utils/actions/stats.d.ts +1 -1
  68. package/dist/tools/vault/utils/actions/stats.js +9 -0
  69. package/dist/tools/vault/utils/actions/stats.js.map +1 -0
  70. package/dist/tools/vault/utils/constants.js +3 -0
  71. package/dist/tools/vault/utils/constants.js.map +1 -0
  72. package/{build → dist}/tools/vault/utils/document.d.ts +3 -3
  73. package/dist/tools/vault/utils/document.js +50 -0
  74. package/dist/tools/vault/utils/document.js.map +1 -0
  75. package/{build → dist}/tools/vault/utils/shared.d.ts +1 -1
  76. package/dist/tools/vault/utils/shared.js +75 -0
  77. package/dist/tools/vault/utils/shared.js.map +1 -0
  78. package/dist/tools/vault/utils.d.ts +8 -0
  79. package/dist/tools/vault/utils.js +8 -0
  80. package/dist/tools/vault/utils.js.map +1 -0
  81. package/{build → dist}/tools/write_property/index.d.ts +1 -1
  82. package/dist/tools/write_property/index.js +120 -0
  83. package/dist/tools/write_property/index.js.map +1 -0
  84. package/dist/tools/write_property/params.js +52 -0
  85. package/dist/tools/write_property/params.js.map +1 -0
  86. package/{build → dist}/utils/DirectoryWalker.d.ts +1 -1
  87. package/dist/utils/DirectoryWalker.js +52 -0
  88. package/dist/utils/DirectoryWalker.js.map +1 -0
  89. package/dist/utils/Embedder.js +46 -0
  90. package/dist/utils/Embedder.js.map +1 -0
  91. package/{build → dist}/utils/Indexer.d.ts +2 -2
  92. package/dist/utils/Indexer.js +169 -0
  93. package/dist/utils/Indexer.js.map +1 -0
  94. package/dist/utils/LLMClient.js +112 -0
  95. package/dist/utils/LLMClient.js.map +1 -0
  96. package/dist/utils/LocalReranker.js +71 -0
  97. package/dist/utils/LocalReranker.js.map +1 -0
  98. package/{build → dist}/utils/RAGIndexer.d.ts +1 -1
  99. package/dist/utils/RAGIndexer.js +238 -0
  100. package/dist/utils/RAGIndexer.js.map +1 -0
  101. package/dist/utils/RerankerClient.js +89 -0
  102. package/dist/utils/RerankerClient.js.map +1 -0
  103. package/{build → dist}/utils/VaultManger/VaultManager.d.ts +3 -3
  104. package/dist/utils/VaultManger/VaultManager.js +459 -0
  105. package/dist/utils/VaultManger/VaultManager.js.map +1 -0
  106. package/dist/utils/VaultManger/VaultPathError.js +13 -0
  107. package/dist/utils/VaultManger/VaultPathError.js.map +1 -0
  108. package/dist/utils/VaultManger/index.d.ts +4 -0
  109. package/dist/utils/VaultManger/index.js +3 -0
  110. package/dist/utils/VaultManger/index.js.map +1 -0
  111. package/{build → dist}/utils/VaultManger/types.d.ts +1 -1
  112. package/dist/utils/VaultManger/types.js +2 -0
  113. package/dist/utils/VaultManger/types.js.map +1 -0
  114. package/dist/utils/VaultWatcher.js +60 -0
  115. package/dist/utils/VaultWatcher.js.map +1 -0
  116. package/dist/utils/VectorDB.js +268 -0
  117. package/dist/utils/VectorDB.js.map +1 -0
  118. package/dist/utils/constants.js +14 -0
  119. package/dist/utils/constants.js.map +1 -0
  120. package/dist/utils/createToolError.js +16 -0
  121. package/dist/utils/createToolError.js.map +1 -0
  122. package/dist/utils/getVaultManager.d.ts +3 -0
  123. package/dist/utils/getVaultManager.js +15 -0
  124. package/dist/utils/getVaultManager.js.map +1 -0
  125. package/dist/utils/processor/LinkExtractor.js +31 -0
  126. package/dist/utils/processor/LinkExtractor.js.map +1 -0
  127. package/dist/utils/processor/MatterParser.d.ts +3 -0
  128. package/dist/utils/processor/MatterParser.js +28 -0
  129. package/dist/utils/processor/MatterParser.js.map +1 -0
  130. package/dist/utils/processor/types.js +22 -0
  131. package/dist/utils/processor/types.js.map +1 -0
  132. package/dist/utils/semaphore.js +26 -0
  133. package/dist/utils/semaphore.js.map +1 -0
  134. package/package.json +19 -12
  135. package/build/config.d.ts.map +0 -1
  136. package/build/index.js +0 -127331
  137. package/build/index.js.map +0 -828
  138. package/build/lancedb.linux-x64-gnu-1e1af8yx.node +0 -0
  139. package/build/tools/vault/utils/actions/collect_context.d.ts +0 -5
  140. package/build/tools/vault/utils/actions/list_all.d.ts +0 -5
  141. package/build/tools/vault/utils/actions/load_memory.d.ts +0 -5
  142. package/build/tools/vault/utils.d.ts +0 -8
  143. package/build/utils/VaultManger/index.d.ts +0 -4
  144. package/build/utils/getVaultManager.d.ts +0 -3
  145. package/build/utils/processor/MatterParser.d.ts +0 -3
  146. /package/{build → dist}/db.d.ts +0 -0
  147. /package/{build → dist}/db.d.ts.map +0 -0
  148. /package/{build → dist}/index.d.ts +0 -0
  149. /package/{build → dist}/index.d.ts.map +0 -0
  150. /package/{build → dist}/server.d.ts +0 -0
  151. /package/{build → dist}/server.d.ts.map +0 -0
  152. /package/{build → dist}/setup.d.ts +0 -0
  153. /package/{build → dist}/setup.d.ts.map +0 -0
  154. /package/{build → dist}/tools/create_document_with_properties/index.d.ts.map +0 -0
  155. /package/{build → dist}/tools/create_document_with_properties/params.d.ts.map +0 -0
  156. /package/{build → dist}/tools/generate_property/index.d.ts.map +0 -0
  157. /package/{build → dist}/tools/generate_property/params.d.ts +0 -0
  158. /package/{build → dist}/tools/generate_property/params.d.ts.map +0 -0
  159. /package/{build → dist}/tools/index.d.ts +0 -0
  160. /package/{build → dist}/tools/index.d.ts.map +0 -0
  161. /package/{build → dist}/tools/organize_attachments/index.d.ts.map +0 -0
  162. /package/{build → dist}/tools/organize_attachments/params.d.ts +0 -0
  163. /package/{build → dist}/tools/organize_attachments/params.d.ts.map +0 -0
  164. /package/{build → dist}/tools/organize_attachments/utils.d.ts.map +0 -0
  165. /package/{build → dist}/tools/vault/index.d.ts.map +0 -0
  166. /package/{build → dist}/tools/vault/metrics.d.ts +0 -0
  167. /package/{build → dist}/tools/vault/metrics.d.ts.map +0 -0
  168. /package/{build → dist}/tools/vault/params.d.ts.map +0 -0
  169. /package/{build → dist}/tools/vault/types/collect_context.d.ts +0 -0
  170. /package/{build → dist}/tools/vault/types/collect_context.d.ts.map +0 -0
  171. /package/{build → dist}/tools/vault/types/list_all.d.ts +0 -0
  172. /package/{build → dist}/tools/vault/types/list_all.d.ts.map +0 -0
  173. /package/{build → dist}/tools/vault/types/read_specific.d.ts +0 -0
  174. /package/{build → dist}/tools/vault/types/read_specific.d.ts.map +0 -0
  175. /package/{build → dist}/tools/vault/types/search.d.ts +0 -0
  176. /package/{build → dist}/tools/vault/types/search.d.ts.map +0 -0
  177. /package/{build → dist}/tools/vault/utils/actions/collect_context.d.ts.map +0 -0
  178. /package/{build → dist}/tools/vault/utils/actions/index_rag.d.ts +0 -0
  179. /package/{build → dist}/tools/vault/utils/actions/index_rag.d.ts.map +0 -0
  180. /package/{build → dist}/tools/vault/utils/actions/list_all.d.ts.map +0 -0
  181. /package/{build → dist}/tools/vault/utils/actions/load_memory.d.ts.map +0 -0
  182. /package/{build → dist}/tools/vault/utils/actions/read.d.ts.map +0 -0
  183. /package/{build → dist}/tools/vault/utils/actions/search.d.ts.map +0 -0
  184. /package/{build → dist}/tools/vault/utils/actions/stats.d.ts.map +0 -0
  185. /package/{build → dist}/tools/vault/utils/constants.d.ts +0 -0
  186. /package/{build → dist}/tools/vault/utils/constants.d.ts.map +0 -0
  187. /package/{build → dist}/tools/vault/utils/document.d.ts.map +0 -0
  188. /package/{build → dist}/tools/vault/utils/shared.d.ts.map +0 -0
  189. /package/{build → dist}/tools/vault/utils.d.ts.map +0 -0
  190. /package/{build → dist}/tools/write_property/index.d.ts.map +0 -0
  191. /package/{build → dist}/tools/write_property/params.d.ts +0 -0
  192. /package/{build → dist}/tools/write_property/params.d.ts.map +0 -0
  193. /package/{build → dist}/utils/DirectoryWalker.d.ts.map +0 -0
  194. /package/{build → dist}/utils/Embedder.d.ts +0 -0
  195. /package/{build → dist}/utils/Embedder.d.ts.map +0 -0
  196. /package/{build → dist}/utils/Indexer.d.ts.map +0 -0
  197. /package/{build → dist}/utils/LLMClient.d.ts +0 -0
  198. /package/{build → dist}/utils/LLMClient.d.ts.map +0 -0
  199. /package/{build → dist}/utils/LocalReranker.d.ts +0 -0
  200. /package/{build → dist}/utils/LocalReranker.d.ts.map +0 -0
  201. /package/{build → dist}/utils/RAGIndexer.d.ts.map +0 -0
  202. /package/{build → dist}/utils/RerankerClient.d.ts +0 -0
  203. /package/{build → dist}/utils/RerankerClient.d.ts.map +0 -0
  204. /package/{build → dist}/utils/VaultManger/VaultManager.d.ts.map +0 -0
  205. /package/{build → dist}/utils/VaultManger/VaultPathError.d.ts +0 -0
  206. /package/{build → dist}/utils/VaultManger/VaultPathError.d.ts.map +0 -0
  207. /package/{build → dist}/utils/VaultManger/index.d.ts.map +0 -0
  208. /package/{build → dist}/utils/VaultManger/types.d.ts.map +0 -0
  209. /package/{build → dist}/utils/VaultWatcher.d.ts +0 -0
  210. /package/{build → dist}/utils/VaultWatcher.d.ts.map +0 -0
  211. /package/{build → dist}/utils/VectorDB.d.ts +0 -0
  212. /package/{build → dist}/utils/VectorDB.d.ts.map +0 -0
  213. /package/{build → dist}/utils/constants.d.ts +0 -0
  214. /package/{build → dist}/utils/constants.d.ts.map +0 -0
  215. /package/{build → dist}/utils/createToolError.d.ts +0 -0
  216. /package/{build → dist}/utils/createToolError.d.ts.map +0 -0
  217. /package/{build → dist}/utils/getVaultManager.d.ts.map +0 -0
  218. /package/{build → dist}/utils/processor/LinkExtractor.d.ts +0 -0
  219. /package/{build → dist}/utils/processor/LinkExtractor.d.ts.map +0 -0
  220. /package/{build → dist}/utils/processor/MatterParser.d.ts.map +0 -0
  221. /package/{build → dist}/utils/processor/types.d.ts +0 -0
  222. /package/{build → dist}/utils/processor/types.d.ts.map +0 -0
  223. /package/{build → dist}/utils/semaphore.d.ts +0 -0
  224. /package/{build → dist}/utils/semaphore.d.ts.map +0 -0
@@ -1,4 +1,4 @@
1
- import type { ObsidianMcpConfig } from "@sunub/core";
1
+ import type { ObsidianMcpConfig } from "@sunub/obsidian-mcp-core";
2
2
  declare const state: ObsidianMcpConfig;
3
3
  export declare function getOptions(): ObsidianMcpConfig | false;
4
4
  export declare function setLocalLLMEnvSetting(): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AA0BlE,QAAA,MAAM,KAAK,EAAE,iBAEkC,CAAC;AAEhD,wBAAgB,UAAU,IAAI,iBAAiB,GAAG,KAAK,CA2DtD;AAED,wBAAgB,qBAAqB,SAIpC;AAED,eAAe,KAAK,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,59 @@
1
+ import { env } from "@huggingface/transformers";
2
+ import { configSchema } from "@sunub/obsidian-mcp-core";
3
+ import { Command } from "commander";
4
+ import dotenv from "dotenv";
5
+ import { MODELS_DIR } from "./utils/constants.js";
6
+ dotenv.config({ debug: false });
7
+ const _rawConfig = {
8
+ vaultPath: process.env["VAULT_DIR_PATH"] || "",
9
+ loggingLevel: "info",
10
+ llmApiUrl: process.env["LLM_API_URL"] || "http://127.0.0.1:8080",
11
+ llmEmbeddingApiUrl: process.env["LLM_EMBEDDING_API_URL"] || "http://127.0.0.1:8081",
12
+ llmEmbeddingModel: process.env["LLM_EMBEDDING_MODEL"] || "nomic-embed-text",
13
+ llmChatModel: process.env["LLM_CHAT_MODEL"] || "llama3",
14
+ llmRerankerApiUrl: process.env["LLM_RERANKER_API_URL"] || "http://127.0.0.1:8082",
15
+ };
16
+ const _parseResult = configSchema.safeParse(_rawConfig);
17
+ // safeParse를 사용하여 모듈 로드 시점에 throw하지 않는다.
18
+ // 유효한 환경(프로덕션 CLI)에서는 getOptions()가 전체 검증을 수행한다.
19
+ // 테스트 환경에서는 beforeAll에서 state.vaultPath를 직접 할당한다.
20
+ const state = _parseResult.success
21
+ ? _parseResult.data
22
+ : _rawConfig;
23
+ export function getOptions() {
24
+ const program = new Command()
25
+ .name("obsidian-mcp-server")
26
+ .description("MCP Server for Obsidian Vault")
27
+ .option("--vault-path <path>", "Path to the Obsidian vault directory", process.env["VAULT_DIR_PATH"] ?? "")
28
+ .option("--logging-level <level>", "Logging level (debug, info, warn, error)", process.env["LOGGING_LEVEL"] ?? "info")
29
+ .option("--llm-api-url <url>", "LLM Chat API URL", process.env["LLM_API_URL"] ?? "http://127.0.0.1:8080")
30
+ .option("--llm-embedding-api-url <url>", "LLM Embedding API URL", process.env["LLM_EMBEDDING_API_URL"] ?? "http://127.0.0.1:8081")
31
+ .option("--llm-embedding-model <model>", "LLM Embedding Model", process.env["LLM_EMBEDDING_MODEL"] ?? "nomic-embed-text")
32
+ .option("--llm-chat-model <model>", "LLM Chat Model", process.env["LLM_CHAT_MODEL"] ?? "llama3")
33
+ .allowUnknownOption()
34
+ .parse(process.argv);
35
+ const options = program.opts();
36
+ const parseResult = configSchema.safeParse(options);
37
+ if (!parseResult.success) {
38
+ console.error("Configuration Error:");
39
+ parseResult.error.issues.forEach((issue) => {
40
+ console.error(` - ${issue.path.join(".")}: ${issue.message}`);
41
+ });
42
+ console.error("\n사용 방법: Environment variables 에 VAULT_DIR_PATH 설정 또는 명령줄 인수 --vault-path <path>를 통해 올바른 구성을 제공하세요.");
43
+ return false;
44
+ }
45
+ state.vaultPath = parseResult.data.vaultPath;
46
+ state.loggingLevel = parseResult.data.loggingLevel;
47
+ state.llmApiUrl = parseResult.data.llmApiUrl;
48
+ state.llmEmbeddingApiUrl = parseResult.data.llmEmbeddingApiUrl;
49
+ state.llmEmbeddingModel = parseResult.data.llmEmbeddingModel;
50
+ state.llmChatModel = parseResult.data.llmChatModel;
51
+ return state;
52
+ }
53
+ export function setLocalLLMEnvSetting() {
54
+ env.localModelPath = MODELS_DIR;
55
+ env.cacheDir = MODELS_DIR;
56
+ env.allowRemoteModels = false;
57
+ }
58
+ export default state;
59
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/db.js ADDED
@@ -0,0 +1,58 @@
1
+ import path from "node:path";
2
+ import * as lancedb from "@lancedb/lancedb";
3
+ import dotenv from "dotenv";
4
+ import state from "./config.js";
5
+ import { llmClient } from "./utils/LLMClient.js";
6
+ dotenv.config();
7
+ const log = (...args) => console.log(...args);
8
+ async function runTestSearch() {
9
+ try {
10
+ // 1. 실제 Obsidian Vault 내의 Vector DB 경로 설정
11
+ if (!state.vaultPath) {
12
+ throw new Error("VAULT_DIR_PATH is not set.");
13
+ }
14
+ const dbPath = path.join(state.vaultPath, ".obsidian", "vector_cache");
15
+ log(`\n📂 연결된 금고: ${state.vaultPath}`);
16
+ log(`🗄️ DB 경로: ${dbPath}`);
17
+ const db = await lancedb.connect(dbPath);
18
+ const tableNames = await db.tableNames();
19
+ if (!tableNames.includes("obsidian_chunks")) {
20
+ log("❌ 'obsidian_chunks' 테이블을 찾을 수 없습니다. 인덱싱이 먼저 필요합니다.");
21
+ return;
22
+ }
23
+ // 2. 실제 서버가 사용하는 테이블 열기
24
+ const table = await db.openTable("obsidian_chunks");
25
+ const queryText = "LCP";
26
+ log(`🌐 임베딩 서버: ${state.llmEmbeddingApiUrl}`);
27
+ log(`🔍 Searching for: "${queryText}" in actual Obsidian index...`);
28
+ // 3. LLMClient를 사용하여 임베딩 생성 (접두사 및 정규화 자동 처리)
29
+ const queryVector = await llmClient.generateEmbedding(`search_query: ${queryText}`);
30
+ // 4. LanceDB 벡터 검색 수행
31
+ const searchResults = await table
32
+ .vectorSearch(queryVector)
33
+ .limit(5)
34
+ .toArray();
35
+ // 5. 결과 출력
36
+ if (searchResults.length === 0) {
37
+ log("No relevant documents found.");
38
+ }
39
+ else {
40
+ log(`\n✅ Found ${searchResults.length} results:`);
41
+ searchResults.forEach((res, i) => {
42
+ log(`\n[Result ${i + 1}] Distance: ${res._distance.toFixed(4)}`);
43
+ log(`FileName: ${res.fileName}`);
44
+ log(`Path: ${res.filePath}`);
45
+ log(`Content Sample: ${res.content.substring(0, 200).replace(/\n/g, " ")}...`);
46
+ if (res.metadata) {
47
+ log(`Metadata Title: ${res.metadata.title}`);
48
+ }
49
+ log("--------------------------------------------------");
50
+ });
51
+ }
52
+ }
53
+ catch (error) {
54
+ console.error("❌ 테스트 검색 중 오류 발생:", error);
55
+ }
56
+ }
57
+ runTestSearch();
58
+ //# sourceMappingURL=db.js.map
package/dist/db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import chalk from "chalk";
4
+ import { getOptions, setLocalLLMEnvSetting } from "./config.js";
5
+ import createMcpServer from "./server.js";
6
+ import { localEmbedder } from "./utils/Embedder.js";
7
+ import { localReranker } from "./utils/LocalReranker.js";
8
+ import { vaultWatcher } from "./utils/VaultWatcher.js";
9
+ async function main() {
10
+ const options = getOptions();
11
+ if (!options) {
12
+ console.error(chalk.red("올바르지 않은 설정으로 인해 서버를 시작할 수 없습니다."));
13
+ process.exit(1);
14
+ }
15
+ setLocalLLMEnvSetting();
16
+ // 로컬 모델 상태 확인 및 출력
17
+ const [embedderReady, rerankerReady] = await Promise.all([
18
+ localEmbedder.checkModelPresence(),
19
+ localReranker.checkModelPresence(),
20
+ ]);
21
+ console.error(chalk.cyan.bold("\n🚀 Obsidian MCP Server Startup"));
22
+ console.error(chalk.dim("----------------------------------"));
23
+ console.error(`${chalk.bold("• Vault Path:")} ${chalk.blue(options.vaultPath)}`);
24
+ console.error(`${chalk.bold("• Local Embedder:")} ${embedderReady ? chalk.green("✅ Ready") : chalk.yellow("⚠️ Missing")}`);
25
+ console.error(`${chalk.bold("• Local Reranker:")} ${rerankerReady ? chalk.green("✅ Ready") : chalk.yellow("⚠️ Missing")}`);
26
+ if (embedderReady && rerankerReady) {
27
+ console.error(chalk.green.bold("✔ High-performance Hybrid Search is ENABLED\n"));
28
+ }
29
+ else {
30
+ console.error(chalk.yellow("ℹ Basic Keyword Search is active. Run 'bunx obsidian-mcp-setup' to enable Hybrid Search.\n"));
31
+ }
32
+ try {
33
+ if (!options.vaultPath) {
34
+ throw new Error("Vault path is required.");
35
+ }
36
+ vaultWatcher.start(options.vaultPath).catch((error) => {
37
+ console.error(chalk.red("[VaultWatcher] Background indexing error:"), error);
38
+ });
39
+ const server = createMcpServer();
40
+ const transport = new StdioServerTransport();
41
+ await server.connect(transport);
42
+ }
43
+ catch (error) {
44
+ console.error(chalk.red("Failed to start MCP server:"), error);
45
+ process.exit(1);
46
+ }
47
+ }
48
+ main().catch((error) => {
49
+ console.error(chalk.red("main() 함수에서 치명적인 오류가 발생했습니다:"), error);
50
+ process.exit(1);
51
+ });
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/server.js ADDED
@@ -0,0 +1,42 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import tools from "./tools/index.js";
3
+ import pkg from "../package.json" with { type: "json" };
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, list, and index documents in the vault.
19
+ * action="search": Unified hybrid search (Keyword + Semantic + Reranking). Automatically falls back to keyword search if local models are missing.
20
+ * action="read": Read a specific document's content and metadata.
21
+ * action="list_all": List all documents in the vault.
22
+ * action="index_vault_to_vectordb": Manually trigger a full vault re-indexing for semantic search.
23
+ - generate_property: Generate frontmatter property suggestions from document content.
24
+ - write_property: Write frontmatter properties to a markdown file.
25
+ - create_document_with_properties: Two-step workflow for AI-generated properties and write.
26
+ - organize_attachments: Move linked attachments and update markdown links.
27
+
28
+ Environment requirements:
29
+ - VAULT_DIR_PATH: Path to your Obsidian vault directory.
30
+ - LLM_API_URL: (Optional) Remote chat server URL (default: http://127.0.0.1:8080).
31
+ - LLM_EMBEDDING_API_URL: (Optional) Remote embedding server URL (default: http://127.0.0.1:8081).
32
+
33
+ Local Search Optimization:
34
+ - To enable high-performance local hybrid search, run 'bunx obsidian-mcp-setup' once.
35
+ `,
36
+ });
37
+ for (const tool of Object.values(tools)) {
38
+ tool.register(mcpServer);
39
+ }
40
+ return mcpServer;
41
+ }
42
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,eAAe;IACtC,MAAM,SAAS,GAAG,IAAI,SAAS,CAC9B;QACC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,qBAAqB;KAC5B,EACD;QACC,YAAY,EAAE;YACb,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;SAC7B;QACD,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;QAqBT;KACL,CACD,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC"}
package/dist/setup.js ADDED
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env node
2
+ import { fileURLToPath } from "node:url";
3
+ import { env, pipeline } from "@huggingface/transformers";
4
+ import chalk from "chalk";
5
+ import inquirer from "inquirer";
6
+ import ora from "ora";
7
+ import { APP_DATA_DIR, ensureAppDataDirs, MODELS_DIR, } from "./utils/constants.js";
8
+ env.localModelPath = MODELS_DIR;
9
+ env.cacheDir = MODELS_DIR;
10
+ env.allowRemoteModels = false;
11
+ async function checkModelStatus(name, type) {
12
+ try {
13
+ await pipeline(type, name, {
14
+ local_files_only: true,
15
+ });
16
+ return true;
17
+ }
18
+ catch (_e) {
19
+ return false;
20
+ }
21
+ }
22
+ export async function setup(options = { force: false }) {
23
+ console.log(chalk.cyan.bold("\n🚀 Obsidian MCP Server: Local Model Setup\n"));
24
+ ensureAppDataDirs();
25
+ const models = [
26
+ {
27
+ name: "Xenova/bge-reranker-base",
28
+ type: "text-classification",
29
+ label: "BGE Reranker (Base)",
30
+ desc: "Improves search relevance by re-ordering results.",
31
+ },
32
+ {
33
+ name: "Xenova/paraphrase-multilingual-MiniLM-L12-v2",
34
+ type: "feature-extraction",
35
+ label: "Multilingual MiniLM",
36
+ desc: "Provides deep understanding of multilingual documents.",
37
+ },
38
+ ];
39
+ console.log(chalk.blue.bold("🔍 Current Model Status:"));
40
+ const statusList = [];
41
+ for (const m of models) {
42
+ const spinner = ora(`Checking ${m.label}...`).start();
43
+ const isReady = await checkModelStatus(m.name, m.type);
44
+ if (isReady) {
45
+ spinner.succeed(`${chalk.bold(m.label)}: ${chalk.green("Ready")}`);
46
+ }
47
+ else {
48
+ spinner.warn(`${chalk.bold(m.label)}: ${chalk.yellow("Not Found or Incomplete")}`);
49
+ }
50
+ statusList.push({ ...m, isReady });
51
+ }
52
+ const allReady = statusList.every((s) => s.isReady);
53
+ if (!options.force && allReady) {
54
+ return true;
55
+ }
56
+ console.log(chalk.blue.bold("\n📦 Installation Details:"));
57
+ console.log(`${chalk.yellow("▶")} ${chalk.bold("Model Path:")} ${chalk.cyan(MODELS_DIR)}`);
58
+ console.log(`${chalk.yellow("▶")} ${chalk.bold("Download Size:")} Approx. ${chalk.green("300MB")}`);
59
+ console.log(`${chalk.yellow("▶")} ${chalk.bold("Uninstallation:")} ${chalk.white(`rm -rf ${APP_DATA_DIR}`)}`);
60
+ console.log(chalk.dim("\n※ All processing happens locally. Your documents are never sent to external servers.\n"));
61
+ const answers = await inquirer.prompt([
62
+ {
63
+ type: "confirm",
64
+ name: "confirmed",
65
+ message: allReady
66
+ ? "All models are already installed. Re-verify them?"
67
+ : "Proceed with the installation?",
68
+ default: !allReady,
69
+ },
70
+ ]);
71
+ if (!answers.confirmed) {
72
+ console.log(chalk.yellow("\n👋 Setup skipped.\n"));
73
+ process.exit(0);
74
+ }
75
+ console.log(chalk.cyan("\n⏳ Starting processing. This may take a few minutes...\n"));
76
+ env.allowRemoteModels = true;
77
+ for (const modelInfo of models) {
78
+ const spinner = ora({
79
+ text: chalk.white(`Processing ${modelInfo.name}...`),
80
+ color: "cyan",
81
+ }).start();
82
+ try {
83
+ await pipeline(modelInfo.type, modelInfo.name);
84
+ spinner.succeed(chalk.green(`Successfully processed ${modelInfo.name}`));
85
+ }
86
+ catch (error) {
87
+ spinner.fail(chalk.red(`Failed to process ${modelInfo.name}: ${error instanceof Error ? error.message : error}`));
88
+ }
89
+ }
90
+ env.allowRemoteModels = false;
91
+ const finalCheckSpinner = ora("Verifying installation...").start();
92
+ const finalResults = await Promise.all(models.map((m) => checkModelStatus(m.name, m.type)));
93
+ if (finalResults.every((r) => r)) {
94
+ finalCheckSpinner.succeed(chalk.green.bold("Verification successful!"));
95
+ console.log(chalk.cyan.bold("\n✨ Setup complete! High-performance hybrid search is enabled.\n"));
96
+ }
97
+ else {
98
+ finalCheckSpinner.fail(chalk.red.bold("Verification failed."));
99
+ console.log(chalk.yellow("\nPlease check your internet and try again.\n"));
100
+ }
101
+ return finalResults.every((r) => r);
102
+ }
103
+ const isMain = process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1];
104
+ if (isMain ||
105
+ process.argv[1]?.endsWith("setup.js") ||
106
+ process.argv[1]?.endsWith("obsidian-mcp-setup")) {
107
+ setup({ force: true })
108
+ .catch((error) => {
109
+ console.error(chalk.red("\n🚨 Fatal error during setup:"), error);
110
+ process.exit(1);
111
+ })
112
+ .then(() => process.exit(0));
113
+ }
114
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { CallToolResult, ToolAnnotations } from "@modelcontextprotocol/sdk/types.js";
3
- import { type CreateDocumentWithPropertiesParams } from "@/tools/create_document_with_properties/params.js";
3
+ import { type CreateDocumentWithPropertiesParams } from "../../tools/create_document_with_properties/params.js";
4
4
  export declare const name = "create_document_with_properties";
5
5
  export declare const annotations: ToolAnnotations;
6
6
  export declare const description = "\n Starts and completes a two-step workflow for AI-generated frontmatter properties.\n\n Step 1: Call this tool with sourcePath (and optional outputPath). It returns a structured instruction payload and a content preview for AI analysis.\n Step 2: Call this same tool again with aiGeneratedProperties. The tool then writes those properties by executing the same write logic used by the 'write_property' tool.\n\n Use this tool when an AI agent should orchestrate analysis and write in a consistent workflow.\n";
@@ -0,0 +1,115 @@
1
+ import state from "../../config.js";
2
+ import { createDocumentWithPropertiesParamsSchema, } from "../../tools/create_document_with_properties/params.js";
3
+ import { execute as writePropertyExecute } from "../../tools/write_property/index.js";
4
+ import { createToolError } from "../../utils/createToolError.js";
5
+ import { getGlobalVaultManager } from "../../utils/getVaultManager.js";
6
+ export const name = "create_document_with_properties";
7
+ export const annotations = {
8
+ title: "Create Document with Properties",
9
+ openWorldHint: true,
10
+ };
11
+ export const description = `
12
+ Starts and completes a two-step workflow for AI-generated frontmatter properties.
13
+
14
+ Step 1: Call this tool with sourcePath (and optional outputPath). It returns a structured instruction payload and a content preview for AI analysis.
15
+ Step 2: Call this same tool again with aiGeneratedProperties. The tool then writes those properties by executing the same write logic used by the 'write_property' tool.
16
+
17
+ Use this tool when an AI agent should orchestrate analysis and write in a consistent workflow.
18
+ `;
19
+ export const register = (mcpServer) => {
20
+ mcpServer.registerTool(name, {
21
+ title: annotations.title || name,
22
+ description: description,
23
+ inputSchema: createDocumentWithPropertiesParamsSchema.shape,
24
+ annotations: annotations,
25
+ }, execute);
26
+ };
27
+ export const execute = async (params) => {
28
+ const vaultDirPath = state.vaultPath;
29
+ if (!vaultDirPath) {
30
+ return createToolError("VAULT_DIR_PATH environment variable is not set", "Set VAULT_DIR_PATH to your Obsidian vault directory");
31
+ }
32
+ let vaultManager = null;
33
+ try {
34
+ vaultManager = getGlobalVaultManager();
35
+ }
36
+ catch (e) {
37
+ return createToolError(e.message);
38
+ }
39
+ try {
40
+ const targetPath = params.outputPath || params.sourcePath;
41
+ if (params.aiGeneratedProperties) {
42
+ const writeResult = await writePropertyExecute({
43
+ filePath: targetPath,
44
+ properties: params.aiGeneratedProperties,
45
+ quiet: params.quiet || false,
46
+ });
47
+ return writeResult;
48
+ }
49
+ const document = await vaultManager.getDocumentInfo(params.sourcePath);
50
+ if (document === null) {
51
+ return createToolError(`Source document not found: ${params.sourcePath}`, "Verify the file path and ensure the file exists. Use the vault tool with 'list_all' action to see all available files.");
52
+ }
53
+ const instructionForAI = {
54
+ ai_prompt: "Your task is to analyze the provided text content and create a JSON object of document properties based on the requested schema. After creating the JSON object, you MUST call the 'create_document_with_properties' tool again, passing back the original parameters along with the new 'aiGeneratedProperties' parameter containing your generated JSON.",
55
+ purpose: "Analyze document content and return a structured JSON object of properties.",
56
+ content_to_analyze: {
57
+ source_path: params.sourcePath,
58
+ content_preview: document.content.substring(0, 2000) +
59
+ (document.content.length > 2000 ? "..." : ""),
60
+ },
61
+ // AI가 다시 호출해야 할 다음 작업에 대한 명확한 명세
62
+ next_action_required: {
63
+ tool_to_call: name, // 바로 이 도구('create_document_with_properties')를 다시 호출
64
+ parameters_to_add: {
65
+ sourcePath: params.sourcePath,
66
+ outputPath: params.outputPath,
67
+ overwrite: params.overwrite,
68
+ quiet: params.quiet,
69
+ aiGeneratedProperties: "<- Insert your generated JSON object here.",
70
+ },
71
+ example_of_next_call: {
72
+ tool_name: name,
73
+ parameters: {
74
+ sourcePath: params.sourcePath,
75
+ aiGeneratedProperties: {
76
+ title: "Serverless 환경에서 I/O 처리 최적화 경험기",
77
+ date: "2025-04-03",
78
+ tags: ["serverless", "optimization"],
79
+ summary: "Promise.all, Worker를 벤치마크하며 서버리스 환경에서의 I/O 처리 최적화 경험기를 공유합니다.",
80
+ slug: "serverless-io-optimization",
81
+ category: "code",
82
+ completed: true,
83
+ },
84
+ },
85
+ },
86
+ },
87
+ };
88
+ return {
89
+ isError: false,
90
+ content: [
91
+ {
92
+ type: "text",
93
+ text: JSON.stringify(instructionForAI, null, 2),
94
+ },
95
+ ],
96
+ };
97
+ }
98
+ catch (error) {
99
+ return createToolError(`Failed to create workflow instruction: ${error instanceof Error ? error.message : String(error)}`);
100
+ }
101
+ };
102
+ const shorthandDescription = {
103
+ ko: "AI 기반 프론트매터 생성 및 적용을 위한 2단계 통합 워크플로우 도구입니다. 첫 번째 호출 시 파일 경로를 통해 문서 내용과 지침을 반환하며, 두 번째 호출 시 생성된 속성값을 받아 실제 문서에 기록합니다.",
104
+ en: "Orchestrates a two-step workflow for AI-generated frontmatter properties. Step 1 retrieves a content preview and schema instructions via file path. Step 2 takes the AI-generated properties and writes them directly to the file. Ideal for end-to-end automation.",
105
+ };
106
+ export default {
107
+ name,
108
+ description,
109
+ annotations,
110
+ inputSchema: createDocumentWithPropertiesParamsSchema.shape,
111
+ execute,
112
+ register,
113
+ shorthandDescription,
114
+ };
115
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/create_document_with_properties/index.ts"],"names":[],"mappings":"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"}
@@ -33,8 +33,8 @@ export declare const createDocumentWithPropertiesParamsSchema: z.ZodObject<{
33
33
  }>>>;
34
34
  quiet: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
35
35
  }, "strip", z.ZodTypeAny, {
36
- quiet: boolean;
37
36
  sourcePath: string;
37
+ quiet: boolean;
38
38
  overwrite?: boolean | undefined;
39
39
  outputPath?: string | undefined;
40
40
  aiGeneratedProperties?: {
@@ -49,7 +49,6 @@ export declare const createDocumentWithPropertiesParamsSchema: z.ZodObject<{
49
49
  } | undefined;
50
50
  }, {
51
51
  sourcePath: string;
52
- quiet?: boolean | undefined;
53
52
  overwrite?: boolean | undefined;
54
53
  outputPath?: string | undefined;
55
54
  aiGeneratedProperties?: {
@@ -62,6 +61,7 @@ export declare const createDocumentWithPropertiesParamsSchema: z.ZodObject<{
62
61
  category?: string | undefined;
63
62
  completed?: boolean | undefined;
64
63
  } | undefined;
64
+ quiet?: boolean | undefined;
65
65
  }>;
66
66
  export type CreateDocumentWithPropertiesParams = z.infer<typeof createDocumentWithPropertiesParamsSchema>;
67
67
  //# sourceMappingURL=params.d.ts.map
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import { obsidianPropertyOutputSchema } from "../../tools/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");
33
+ //# sourceMappingURL=params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.js","sourceRoot":"","sources":["../../../src/tools/create_document_with_properties/params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAEnF,mBAAmB;AACnB,MAAM,UAAU,GAAG,CAAC;KAClB,MAAM,EAAE;KACR,QAAQ,CACR,wFAAwF,CACxF,CAAC;AACH,MAAM,UAAU,GAAG,CAAC;KAClB,MAAM,EAAE;KACR,QAAQ,EAAE;KACV,QAAQ,CACR,6HAA6H,CAC7H,CAAC;AACH,MAAM,SAAS,GAAG,CAAC;KACjB,OAAO,EAAE;KACT,OAAO,CAAC,KAAK,CAAC;KACd,QAAQ,CACR,sGAAsG,CACtG,CAAC;AACH,MAAM,qBAAqB,GAAG,4BAA4B;KACxD,QAAQ,EAAE;KACV,QAAQ,CACR,kHAAkH,CAClH,CAAC;AACH,MAAM,KAAK,GAAG,CAAC;KACb,OAAO,EAAE;KACT,QAAQ,EAAE;KACV,OAAO,CAAC,KAAK,CAAC;KACd,QAAQ,CACR,2EAA2E,CAC3E,CAAC;AAEH,eAAe;AACf,MAAM,CAAC,MAAM,wCAAwC,GAAG,CAAC;KACvD,MAAM,CAAC;IACP,UAAU,EAAE,UAAU;IACtB,UAAU,EAAE,UAAU;IACtB,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;IAC/B,qBAAqB,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IACvD,KAAK,EAAE,KAAK;CACZ,CAAC;KACD,QAAQ,CACR,wFAAwF,CACxF,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { CallToolResult, ToolAnnotations } from "@modelcontextprotocol/sdk/types.js";
3
- import { type ObsidianPropertyQueryParams } from "@/tools/generate_property/params.js";
3
+ import { type ObsidianPropertyQueryParams } from "../../tools/generate_property/params.js";
4
4
  export declare const name = "generate_property";
5
5
  export declare const annotations: ToolAnnotations;
6
6
  export declare const description = "\n Reads a target markdown document and returns an AI-facing payload for generating frontmatter properties.\n\n This tool does not write to disk. It returns content_preview and a target output schema so an AI can produce a valid property object.\n\n Use Cases:\n - After completing a draft, when you need property suggestions from content.\n - When missing frontmatter fields (title, tags, summary, slug, date, category, completed) should be generated.\n\n To apply generated properties to a file, call 'write_property' with the resulting JSON.\n";