obsidian-mcp-pro 1.8.6 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/build/config.d.ts.map +1 -1
  2. package/build/config.js +25 -6
  3. package/build/config.js.map +1 -1
  4. package/build/http-server.d.ts +6 -5
  5. package/build/http-server.d.ts.map +1 -1
  6. package/build/http-server.js +109 -14
  7. package/build/http-server.js.map +1 -1
  8. package/build/index.d.ts +15 -0
  9. package/build/index.d.ts.map +1 -1
  10. package/build/index.js +59 -54
  11. package/build/index.js.map +1 -1
  12. package/build/install.d.ts.map +1 -1
  13. package/build/install.js +38 -1
  14. package/build/install.js.map +1 -1
  15. package/build/lib/bases.d.ts +41 -18
  16. package/build/lib/bases.d.ts.map +1 -1
  17. package/build/lib/bases.js +304 -50
  18. package/build/lib/bases.js.map +1 -1
  19. package/build/lib/chunker.js.map +1 -1
  20. package/build/lib/concurrency.js.map +1 -1
  21. package/build/lib/dates.d.ts.map +1 -1
  22. package/build/lib/dates.js +59 -3
  23. package/build/lib/dates.js.map +1 -1
  24. package/build/lib/embedding-providers.d.ts.map +1 -1
  25. package/build/lib/embedding-providers.js +73 -9
  26. package/build/lib/embedding-providers.js.map +1 -1
  27. package/build/lib/embedding-store.d.ts +10 -0
  28. package/build/lib/embedding-store.d.ts.map +1 -1
  29. package/build/lib/embedding-store.js +153 -57
  30. package/build/lib/embedding-store.js.map +1 -1
  31. package/build/lib/index-cache.d.ts.map +1 -1
  32. package/build/lib/index-cache.js +95 -49
  33. package/build/lib/index-cache.js.map +1 -1
  34. package/build/lib/link-rewriter.js.map +1 -1
  35. package/build/lib/logger.js +4 -4
  36. package/build/lib/logger.js.map +1 -1
  37. package/build/lib/markdown.d.ts +21 -0
  38. package/build/lib/markdown.d.ts.map +1 -1
  39. package/build/lib/markdown.js +100 -1
  40. package/build/lib/markdown.js.map +1 -1
  41. package/build/lib/mime.d.ts +21 -1
  42. package/build/lib/mime.d.ts.map +1 -1
  43. package/build/lib/mime.js +66 -1
  44. package/build/lib/mime.js.map +1 -1
  45. package/build/lib/permissions.d.ts.map +1 -1
  46. package/build/lib/permissions.js +18 -1
  47. package/build/lib/permissions.js.map +1 -1
  48. package/build/lib/progress.d.ts +1 -1
  49. package/build/lib/progress.d.ts.map +1 -1
  50. package/build/lib/progress.js +1 -1
  51. package/build/lib/progress.js.map +1 -1
  52. package/build/lib/sections.d.ts.map +1 -1
  53. package/build/lib/sections.js +11 -6
  54. package/build/lib/sections.js.map +1 -1
  55. package/build/lib/tag-rewriter.d.ts +7 -0
  56. package/build/lib/tag-rewriter.d.ts.map +1 -1
  57. package/build/lib/tag-rewriter.js +110 -46
  58. package/build/lib/tag-rewriter.js.map +1 -1
  59. package/build/lib/vault.d.ts.map +1 -1
  60. package/build/lib/vault.js +167 -52
  61. package/build/lib/vault.js.map +1 -1
  62. package/build/tools/attachments.d.ts.map +1 -1
  63. package/build/tools/attachments.js +53 -7
  64. package/build/tools/attachments.js.map +1 -1
  65. package/build/tools/bases.d.ts.map +1 -1
  66. package/build/tools/bases.js +38 -7
  67. package/build/tools/bases.js.map +1 -1
  68. package/build/tools/canvas.d.ts.map +1 -1
  69. package/build/tools/canvas.js +99 -32
  70. package/build/tools/canvas.js.map +1 -1
  71. package/build/tools/links.d.ts.map +1 -1
  72. package/build/tools/links.js +144 -53
  73. package/build/tools/links.js.map +1 -1
  74. package/build/tools/prompts.d.ts +2 -2
  75. package/build/tools/prompts.d.ts.map +1 -1
  76. package/build/tools/prompts.js +34 -27
  77. package/build/tools/prompts.js.map +1 -1
  78. package/build/tools/read.d.ts.map +1 -1
  79. package/build/tools/read.js +68 -35
  80. package/build/tools/read.js.map +1 -1
  81. package/build/tools/sections.d.ts.map +1 -1
  82. package/build/tools/sections.js +59 -16
  83. package/build/tools/sections.js.map +1 -1
  84. package/build/tools/semantic.d.ts.map +1 -1
  85. package/build/tools/semantic.js +175 -136
  86. package/build/tools/semantic.js.map +1 -1
  87. package/build/tools/tags.d.ts.map +1 -1
  88. package/build/tools/tags.js +9 -5
  89. package/build/tools/tags.js.map +1 -1
  90. package/build/tools/write.d.ts.map +1 -1
  91. package/build/tools/write.js +85 -17
  92. package/build/tools/write.js.map +1 -1
  93. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAsJ/D,wBAAgB,cAAc,IAAI,WAAW,CAsB5C;AAED,wBAAsB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAwCrF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwK/D,wBAAgB,cAAc,IAAI,WAAW,CAsB5C;AAED,wBAAsB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAwCrF"}
package/build/config.js CHANGED
@@ -19,6 +19,22 @@ function getObsidianConfigPath() {
19
19
  const configDir = process.env.XDG_CONFIG_HOME || path.join(os.homedir(), ".config");
20
20
  return path.join(configDir, "obsidian", "obsidian.json");
21
21
  }
22
+ function isObsidianConfig(value) {
23
+ if (value === null || typeof value !== "object")
24
+ return false;
25
+ const obj = value;
26
+ if (!obj.vaults || typeof obj.vaults !== "object")
27
+ return false;
28
+ const vaults = obj.vaults;
29
+ for (const [, entry] of Object.entries(vaults)) {
30
+ if (entry === null || typeof entry !== "object")
31
+ return false;
32
+ const vault = entry;
33
+ if (typeof vault.path !== "string")
34
+ return false;
35
+ }
36
+ return true;
37
+ }
22
38
  function isValidVaultPath(vaultPath) {
23
39
  try {
24
40
  const obsidianDir = path.join(vaultPath, ".obsidian");
@@ -64,21 +80,24 @@ function resolveVaultFromObsidianConfig() {
64
80
  let config;
65
81
  try {
66
82
  const raw = fs.readFileSync(configPath, "utf-8");
67
- config = JSON.parse(raw);
83
+ const parsed = JSON.parse(raw);
84
+ if (!isObsidianConfig(parsed)) {
85
+ log.warn("Obsidian config failed runtime validation (missing or malformed vaults)", {
86
+ configPath,
87
+ });
88
+ return null;
89
+ }
90
+ config = parsed;
68
91
  }
69
92
  catch (err) {
70
93
  log.warn("Failed to parse Obsidian config", { configPath, err: err });
71
94
  return null;
72
95
  }
73
- if (!config.vaults || typeof config.vaults !== "object") {
96
+ if (Object.keys(config.vaults).length === 0) {
74
97
  log.warn("No vaults found in Obsidian config");
75
98
  return null;
76
99
  }
77
100
  const vaultEntries = Object.values(config.vaults);
78
- if (vaultEntries.length === 0) {
79
- log.warn("Obsidian config contains no vault entries");
80
- return null;
81
- }
82
101
  const desiredName = process.env.OBSIDIAN_VAULT_NAME;
83
102
  if (desiredName) {
84
103
  const matched = vaultEntries.find((entry) => {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAYtC,SAAS,qBAAqB;IAC5B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE/B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,IAAI,CACd,EAAE,CAAC,OAAO,EAAE,EACZ,SAAS,EACT,qBAAqB,EACrB,UAAU,EACV,eAAe,CAChB,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACpF,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB;IACzC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACtD,OAAO,CACL,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YACxB,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;YACpC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;YAC1B,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CACvC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,uEAAuE;QACvE,sEAAsE;QACtE,gEAAgE;QAChE,GAAG,CAAC,IAAI,CAAC,kEAAkE,EAAE;YAC3E,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,8BAA8B;IACrC,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,qBAAqB,EAAE,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,0CAA0C,EAAE,EAAE,GAAG,EAAE,GAAY,EAAE,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,GAAY,EAAE,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAEpD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,SAAS,KAAK,WAAW,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,+DAA+D,EAAE;gBACxE,SAAS,EAAE,WAAW;gBACtB,SAAS,EAAE,QAAQ;aACpB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,8DAA8D,EAAE;YACvE,SAAS,EAAE,WAAW;SACvB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,GAAG,CAAC,IAAI,CAAC,2GAA2G,EAAE;oBACpH,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;iBAClC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,mCAAmC;IACnC,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;SAC7C,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,MAAM,aAAa,GAAG,8BAA8B,EAAE,CAAC;IACvD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO;YACL,SAAS,EAAE,aAAa;YACxB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC;SAClD,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CACb,oJAAoJ,CACrJ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAkB;IACzD,MAAM,QAAQ,GAAoB;QAChC,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,YAAY;KACrB,CAAC;IAEF,MAAM,iBAAiB,GAAG,SAAS,IAAI,cAAc,EAAE,CAAC,SAAS,CAAC;IAClE,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,CACpC,iBAAiB,EACjB,WAAW,EACX,kBAAkB,CACnB,CAAC;IAEF,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,mCAAmC,EAAE;YAC5C,UAAU,EAAE,oBAAoB;YAChC,GAAG,EAAE,GAAY;SAClB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QAC1D,OAAO;YACL,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM;YAC3E,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM;YAC3E,QAAQ,EACN,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SACpE,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,oCAAoC,EAAE;YAC7C,UAAU,EAAE,oBAAoB;YAChC,GAAG,EAAE,GAAY;SAClB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -10,11 +10,12 @@ export interface HttpServerOptions {
10
10
  installSignalHandlers?: boolean;
11
11
  /** Reported on `/health` and `/version`. Defaults to empty string. */
12
12
  version?: string;
13
- /** Allowed CORS origins. Defaults to `["*"]` to match prior behavior. Use
14
- * an explicit list (e.g. `["https://claude.ai"]`) to tighten for
15
- * browser-facing deployments. Requests from other origins still succeed
16
- * (CORS is a browser-only restriction) but the browser will reject the
17
- * response. */
13
+ /** Allowed CORS origins. Defaults to localhost-only patterns
14
+ * (`["http://localhost:*", "http://127.0.0.1:*", "http://[::1]:*"]`).
15
+ * Use an explicit list (e.g. `["https://claude.ai"]`) for browser-facing
16
+ * deployments. Pass `["*"]` to allow all origins (a warning is logged).
17
+ * Requests from other origins still succeed (CORS is a browser-only
18
+ * restriction) but the browser will reject the response. */
18
19
  allowedOrigins?: string[];
19
20
  /** Max requests per minute per client IP. 0 or undefined disables. */
20
21
  rateLimitPerMinute?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,SAAS,CAAC;IAChC;;wEAEoE;IACpE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;oBAIgB;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AA0JD,wBAAsB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsOxF"}
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,SAAS,CAAC;IAChC;;wEAEoE;IACpE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;iEAK6D;IAC7D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,sEAAsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAqLD,wBAAsB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgTxF"}
@@ -3,6 +3,7 @@ import { randomUUID, timingSafeEqual } from "node:crypto";
3
3
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
4
4
  import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
5
5
  import { log } from "./lib/logger.js";
6
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
6
7
  const MAX_BODY_BYTES = 4 * 1024 * 1024;
7
8
  const SESSION_IDLE_TIMEOUT_MS = 60 * 60 * 1000; // 1 hour
8
9
  const SESSION_SWEEP_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
@@ -54,6 +55,18 @@ function readBody(req) {
54
55
  req.on("error", reject);
55
56
  });
56
57
  }
58
+ function setSecurityHeaders(req, res) {
59
+ res.setHeader("X-Content-Type-Options", "nosniff");
60
+ res.setHeader("X-Frame-Options", "DENY");
61
+ res.setHeader("Cache-Control", "no-store");
62
+ // Add HSTS when the connection is over TLS (direct or behind a
63
+ // TLS-terminating reverse proxy that sets the standard header).
64
+ const isTls = req.socket.encrypted ||
65
+ req.headers["x-forwarded-proto"] === "https";
66
+ if (isTls) {
67
+ res.setHeader("Strict-Transport-Security", "max-age=31536000");
68
+ }
69
+ }
57
70
  function sendJson(res, status, body) {
58
71
  res.writeHead(status, { "Content-Type": "application/json" });
59
72
  res.end(JSON.stringify(body));
@@ -76,6 +89,18 @@ function constantTimeEqual(a, b) {
76
89
  const bytesMatch = timingSafeEqual(aPad, bPad);
77
90
  return lengthsMatch && bytesMatch;
78
91
  }
92
+ // Check whether an origin matches an allowlist entry. Supports a trailing
93
+ // `:*` wildcard that matches any port (e.g. `http://localhost:*` matches
94
+ // `http://localhost:3000`). Exact strings match as before.
95
+ function originMatches(origin, pattern) {
96
+ if (pattern === origin)
97
+ return true;
98
+ if (pattern.endsWith(":*")) {
99
+ const prefix = pattern.slice(0, -1); // "http://localhost:"
100
+ return origin.startsWith(prefix);
101
+ }
102
+ return false;
103
+ }
79
104
  function setCors(req, res, allowedOrigins) {
80
105
  // Reflect the request origin only when it matches the allowlist; fall back
81
106
  // to the first allowlist entry otherwise. `*` short-circuits to the
@@ -85,11 +110,11 @@ function setCors(req, res, allowedOrigins) {
85
110
  let allowOrigin = "*";
86
111
  if (!allowAny) {
87
112
  // Always set `Vary: Origin` when the ACAO value depends on the request
88
- // origin otherwise a shared cache may serve a response with one origin
113
+ // origin - otherwise a shared cache may serve a response with one origin
89
114
  // pinned to a different origin's request. This must fire regardless of
90
115
  // whether *this particular* origin matched the allowlist.
91
116
  res.setHeader("Vary", "Origin");
92
- if (requestOrigin && allowedOrigins.includes(requestOrigin)) {
117
+ if (requestOrigin && allowedOrigins.some((p) => originMatches(requestOrigin, p))) {
93
118
  allowOrigin = requestOrigin;
94
119
  }
95
120
  else {
@@ -164,7 +189,10 @@ export async function startHttpServer(opts) {
164
189
  // See https://github.com/rps321321/obsidian-mcp-pro/issues/8.
165
190
  const allowedOrigins = opts.allowedOrigins && opts.allowedOrigins.length > 0
166
191
  ? opts.allowedOrigins
167
- : ["*"];
192
+ : ["http://localhost:*", "http://127.0.0.1:*", "http://[::1]:*"];
193
+ if (allowedOrigins.includes("*")) {
194
+ log.warn("CORS configured with wildcard origin '*'. Consider restricting to specific origins for production deployments.");
195
+ }
168
196
  const rateLimiter = opts.rateLimitPerMinute && opts.rateLimitPerMinute > 0
169
197
  ? new RateLimiter(opts.rateLimitPerMinute)
170
198
  : null;
@@ -190,9 +218,12 @@ export async function startHttpServer(opts) {
190
218
  // third-party hostname and be rejected. Populated after `listen()` so we
191
219
  // know the bound port; this matters when callers pass `port: 0` (tests,
192
220
  // embedders) and the OS assigns one. The array reference is captured by
193
- // each `StreamableHTTPServerTransport` and read on every request, so
194
- // re-assigning it post-listen propagates to all subsequent transports.
195
- let allowedHosts = [];
221
+ // each `StreamableHTTPServerTransport` constructor and read on every
222
+ // request, so we MUST mutate this array in place (push) rather than
223
+ // re-assigning the binding: a new array would be invisible to transports
224
+ // that already grabbed the original reference, silently disabling
225
+ // DNS-rebinding protection.
226
+ const allowedHosts = [];
196
227
  const httpServer = createServer(async (req, res) => {
197
228
  // Cap wall-clock time for POST requests only. GET is used by the
198
229
  // Streamable HTTP transport for long-lived SSE streams that intentionally
@@ -204,6 +235,7 @@ export async function startHttpServer(opts) {
204
235
  res.setTimeout(REQUEST_TIMEOUT_MS);
205
236
  }
206
237
  setCors(req, res, allowedOrigins);
238
+ setSecurityHeaders(req, res);
207
239
  if (req.method === "OPTIONS") {
208
240
  res.writeHead(204);
209
241
  res.end();
@@ -239,6 +271,20 @@ export async function startHttpServer(opts) {
239
271
  return;
240
272
  }
241
273
  if (url.pathname === "/version") {
274
+ // GET stays unauthenticated for monitoring probes (same shape as
275
+ // /health). Non-GET methods are non-sensical for a read-only
276
+ // version endpoint and, when a Bearer token is configured, must
277
+ // require it — anonymous POSTs were previously a free
278
+ // unauthenticated reflection point.
279
+ if (req.method !== "GET" && opts.bearerToken) {
280
+ const header = req.headers.authorization ?? "";
281
+ const token = header.startsWith("Bearer ") ? header.slice(7) : "";
282
+ if (!constantTimeEqual(token, opts.bearerToken)) {
283
+ res.setHeader("WWW-Authenticate", 'Bearer realm="obsidian-mcp-pro"');
284
+ sendJson(res, 401, { error: "Unauthorized" });
285
+ return;
286
+ }
287
+ }
242
288
  sendJson(res, 200, { version: opts.version ?? "" });
243
289
  return;
244
290
  }
@@ -249,6 +295,12 @@ export async function startHttpServer(opts) {
249
295
  const header = req.headers.authorization ?? "";
250
296
  const token = header.startsWith("Bearer ") ? header.slice(7) : "";
251
297
  if (!constantTimeEqual(token, opts.bearerToken)) {
298
+ log.warn("Authentication failure", {
299
+ method: req.method,
300
+ path: url.pathname,
301
+ ip: clientIp(req),
302
+ reason: header ? "invalid token" : "missing token",
303
+ });
252
304
  res.setHeader("WWW-Authenticate", 'Bearer realm="obsidian-mcp-pro"');
253
305
  sendJson(res, 401, { error: "Unauthorized" });
254
306
  return;
@@ -256,7 +308,21 @@ export async function startHttpServer(opts) {
256
308
  }
257
309
  try {
258
310
  const sessionId = req.headers["mcp-session-id"];
311
+ if (sessionId && !UUID_RE.test(sessionId)) {
312
+ sendJson(res, 400, { error: "Invalid session ID format" });
313
+ return;
314
+ }
259
315
  if (req.method === "POST") {
316
+ // MCP Streamable HTTP requires JSON bodies. Reject anything else
317
+ // before reading the stream: avoids buffering up to 4 MB of
318
+ // non-JSON data just to produce a parse error, and gives clients
319
+ // a clearer 415 ("the server understands the request method but
320
+ // the media type is unsupported") than a generic 400.
321
+ const contentType = req.headers["content-type"] ?? "";
322
+ if (!contentType.toLowerCase().includes("application/json")) {
323
+ sendJson(res, 415, { error: "Unsupported Media Type: expected application/json" });
324
+ return;
325
+ }
260
326
  let body;
261
327
  try {
262
328
  body = await readBody(req);
@@ -290,8 +356,23 @@ export async function startHttpServer(opts) {
290
356
  }
291
357
  };
292
358
  const sessionServer = opts.buildMcpServer();
293
- await sessionServer.connect(transport);
294
- await transport.handleRequest(req, res, body);
359
+ try {
360
+ await sessionServer.connect(transport);
361
+ await transport.handleRequest(req, res, body);
362
+ }
363
+ catch (err) {
364
+ // If init throws after the SDK already assigned a session id
365
+ // (e.g. handleRequest fails mid-stream), the `onclose` cleanup
366
+ // may not fire — drop the bookkeeping ourselves so a leaked
367
+ // transport doesn't accumulate in the maps and eventually hit
368
+ // the idle sweeper hours later.
369
+ const sid = transport.sessionId;
370
+ if (sid) {
371
+ transports.delete(sid);
372
+ lastActivity.delete(sid);
373
+ }
374
+ throw err;
375
+ }
295
376
  return;
296
377
  }
297
378
  sendJson(res, 400, {
@@ -329,18 +410,16 @@ export async function startHttpServer(opts) {
329
410
  // so callers can build URLs that work.
330
411
  const addr = httpServer.address();
331
412
  const boundPort = typeof addr === "object" && addr ? addr.port : opts.port;
332
- allowedHosts = [
333
- `${opts.host}:${boundPort}`,
334
- `127.0.0.1:${boundPort}`,
335
- `localhost:${boundPort}`,
336
- `[::1]:${boundPort}`,
337
- ];
413
+ allowedHosts.push(`${opts.host}:${boundPort}`, `127.0.0.1:${boundPort}`, `localhost:${boundPort}`, `[::1]:${boundPort}`);
338
414
  log.info(`HTTP server listening`, {
339
415
  url: `http://${opts.host}:${boundPort}/mcp`,
340
416
  bearerAuth: Boolean(opts.bearerToken),
341
417
  allowedOrigins: allowedOrigins.join(","),
342
418
  rateLimitPerMinute: opts.rateLimitPerMinute ?? 0,
343
419
  });
420
+ if (!opts.bearerToken) {
421
+ log.warn("WARNING: HTTP server starting without authentication. Set MCP_AUTH_TOKEN to enable bearer token auth.");
422
+ }
344
423
  const stop = async () => {
345
424
  log.info(`Shutting down HTTP server`);
346
425
  clearInterval(sweeper);
@@ -352,6 +431,11 @@ export async function startHttpServer(opts) {
352
431
  }
353
432
  transports.clear();
354
433
  lastActivity.clear();
434
+ // `httpServer.close()` waits for all active sockets to close on their
435
+ // own — keep-alive idle connections would otherwise pin the server
436
+ // open indefinitely. `closeAllConnections` (Node >=18.2) tears down
437
+ // sockets that aren't currently mid-response so `close()` can return.
438
+ httpServer.closeAllConnections?.();
355
439
  await new Promise((resolve) => httpServer.close(() => resolve()));
356
440
  };
357
441
  const installSignals = opts.installSignalHandlers ?? true;
@@ -360,6 +444,17 @@ export async function startHttpServer(opts) {
360
444
  await stop();
361
445
  process.exit(0);
362
446
  };
447
+ // Drop any prior listeners we may have installed. Tests and embedders
448
+ // that start/stop the server repeatedly in the same process would
449
+ // otherwise accumulate listeners and trip Node's default
450
+ // MaxListenersExceededWarning at 11 boots. We intentionally clear
451
+ // ALL listeners on these signals because (a) we own the handler we
452
+ // just defined, (b) any prior obsidian-mcp-pro handler is exactly
453
+ // the one we're about to replace, and (c) host processes that need
454
+ // their own SIGINT/SIGTERM behavior should pass
455
+ // `installSignalHandlers: false`.
456
+ process.removeAllListeners("SIGINT");
457
+ process.removeAllListeners("SIGTERM");
363
458
  process.on("SIGINT", onSignal);
364
459
  process.on("SIGTERM", onSignal);
365
460
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -1,5 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { type InstallClient } from "./install.js";
4
+ interface CliOptions {
5
+ command: "serve" | "install" | "help" | "version";
6
+ transport: "stdio" | "http";
7
+ host: string;
8
+ port: number;
9
+ bearerToken?: string;
10
+ allowedOrigins?: string[];
11
+ rateLimitPerMinute?: number;
12
+ installClient: InstallClient;
13
+ installVaultPath?: string;
14
+ installVaultName?: string;
15
+ installServerName?: string;
16
+ }
17
+ export declare function parseArgs(argv: string[]): CliOptions;
3
18
  export declare function buildMcpServer(vaultPath: string | undefined): McpServer;
4
19
  export { startHttpServer, type HttpServerHandle, type HttpServerOptions } from "./http-server.js";
5
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AA4KtF,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAgJvE;AAqFD,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAsBtF,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAE9D,UAAU,UAAU;IAClB,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IAClD,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA4FpD;AAkDD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CA4IvE;AAqFD,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
package/build/index.js CHANGED
@@ -8,8 +8,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
8
8
  import { getVaultConfig, getDailyNoteConfig } from "./config.js";
9
9
  import { resolveVaultPathSafe, listNotes, readNote } from "./lib/vault.js";
10
10
  import { describePermissions } from "./lib/permissions.js";
11
- import { flushAllCachesAsync } from "./lib/index-cache.js";
12
- import { mapConcurrent } from "./lib/concurrency.js";
11
+ import { flushAllCachesAsync, readAllCached } from "./lib/index-cache.js";
13
12
  import { extractTags } from "./lib/markdown.js";
14
13
  import { log, configureLogger } from "./lib/logger.js";
15
14
  import { sanitizeError } from "./lib/errors.js";
@@ -26,7 +25,7 @@ import { registerSemanticTools } from "./tools/semantic.js";
26
25
  import { registerPrompts } from "./tools/prompts.js";
27
26
  import { startHttpServer } from "./http-server.js";
28
27
  import { runInstall } from "./install.js";
29
- function parseArgs(argv) {
28
+ export function parseArgs(argv) {
30
29
  const opts = {
31
30
  command: "serve",
32
31
  transport: "stdio",
@@ -72,9 +71,20 @@ function parseArgs(argv) {
72
71
  }
73
72
  else if (a === "--token" && argv[i + 1]) {
74
73
  opts.bearerToken = argv[++i];
74
+ // Redact the secret from process.argv so it doesn't leak via `ps`,
75
+ // /proc/<pid>/cmdline, or crash dumps. Mutate both the local argv copy
76
+ // and process.argv (which a caller may pass a slice of).
77
+ argv[i] = "***";
78
+ const pIdx = process.argv.indexOf(opts.bearerToken);
79
+ if (pIdx !== -1)
80
+ process.argv[pIdx] = "***";
75
81
  }
76
82
  else if (a.startsWith("--token=")) {
77
83
  opts.bearerToken = a.slice("--token=".length);
84
+ argv[i] = "--token=***";
85
+ const pIdx = process.argv.indexOf(a);
86
+ if (pIdx !== -1)
87
+ process.argv[pIdx] = "--token=***";
78
88
  }
79
89
  else if (a === "--allow-origin" && argv[i + 1]) {
80
90
  opts.allowedOrigins = argv[++i].split(",").map((s) => s.trim()).filter(Boolean);
@@ -136,36 +146,36 @@ function parseArgs(argv) {
136
146
  return opts;
137
147
  }
138
148
  function printHelp() {
139
- console.log(`obsidian-mcp-pro — MCP server for Obsidian vaults
140
-
141
- Usage:
142
- obsidian-mcp-pro [serve] [options] Start the MCP server (default)
143
- obsidian-mcp-pro install [options] Install into a MCP client config
144
- obsidian-mcp-pro --version Print version
145
- obsidian-mcp-pro --help Show this help
146
-
147
- Serve options:
148
- --transport=<stdio|http> Transport to use (default: stdio)
149
- --host=<addr> HTTP bind host (default: 127.0.0.1)
150
- --port=<n> HTTP port (default: 3333)
151
- --token=<secret> Require Bearer <secret> (or env MCP_HTTP_TOKEN)
152
- --allow-origin=<origins> Comma-separated CORS allowlist (default: *)
153
- --rate-limit=<n> Max requests per minute per IP (default: unlimited)
154
-
155
- Install options:
156
- --client=<claude|cursor> Target client (default: claude)
157
- --vault=<path> Pin OBSIDIAN_VAULT_PATH
158
- --vault-name=<name> Pin OBSIDIAN_VAULT_NAME
159
- --name=<server-name> Entry name in mcpServers (default: obsidian)
160
-
161
- Env vars:
162
- OBSIDIAN_VAULT_PATH Vault to serve (else auto-detected from Obsidian config)
163
- OBSIDIAN_VAULT_NAME Select a named vault when multiple exist
164
- OBSIDIAN_READ_PATHS Comma/colon list of folders read tools may access
165
- OBSIDIAN_WRITE_PATHS Comma/colon list of folders write tools may modify
166
- MCP_HTTP_TOKEN Default bearer token for --transport=http
167
- LOG_LEVEL debug|info|warn|error|silent (default: info)
168
- LOG_FORMAT text|json (default: text)
149
+ console.log(`obsidian-mcp-pro — MCP server for Obsidian vaults
150
+
151
+ Usage:
152
+ obsidian-mcp-pro [serve] [options] Start the MCP server (default)
153
+ obsidian-mcp-pro install [options] Install into a MCP client config
154
+ obsidian-mcp-pro --version Print version
155
+ obsidian-mcp-pro --help Show this help
156
+
157
+ Serve options:
158
+ --transport=<stdio|http> Transport to use (default: stdio)
159
+ --host=<addr> HTTP bind host (default: 127.0.0.1)
160
+ --port=<n> HTTP port (default: 3333)
161
+ --token=<secret> Require Bearer <secret> (prefer env MCP_HTTP_TOKEN to avoid leaking via ps/cmdline)
162
+ --allow-origin=<origins> Comma-separated CORS allowlist (default: *)
163
+ --rate-limit=<n> Max requests per minute per IP (default: unlimited)
164
+
165
+ Install options:
166
+ --client=<claude|cursor> Target client (default: claude)
167
+ --vault=<path> Pin OBSIDIAN_VAULT_PATH
168
+ --vault-name=<name> Pin OBSIDIAN_VAULT_NAME
169
+ --name=<server-name> Entry name in mcpServers (default: obsidian)
170
+
171
+ Env vars:
172
+ OBSIDIAN_VAULT_PATH Vault to serve (else auto-detected from Obsidian config)
173
+ OBSIDIAN_VAULT_NAME Select a named vault when multiple exist
174
+ OBSIDIAN_READ_PATHS Comma/colon list of folders read tools may access
175
+ OBSIDIAN_WRITE_PATHS Comma/colon list of folders write tools may modify
176
+ MCP_HTTP_TOKEN Default bearer token for --transport=http
177
+ LOG_LEVEL debug|info|warn|error|silent (default: info)
178
+ LOG_FORMAT text|json (default: text)
169
179
  `);
170
180
  }
171
181
  function readPackageVersion() {
@@ -226,21 +236,20 @@ export function buildMcpServer(vaultPath) {
226
236
  throw new Error(noVaultError);
227
237
  const tagIndex = {};
228
238
  const notes = await listNotes(vaultPath);
229
- // Parallel fan-out sequential reads would spend most of the time
230
- // blocked on fs I/O (one `realpath` syscall per note via
231
- // `resolveVaultPathSafe` inside `readNote`). Errors per note are
232
- // swallowed by `mapConcurrent` so one corrupt file can't poison the
233
- // entire index.
234
- const perNote = await mapConcurrent(notes, 8, async (notePath) => {
235
- const content = await readNote(vaultPath, notePath);
236
- return { notePath, tags: extractTags(content) };
239
+ // Use the mtime-based cache so repeated tag-index requests skip re-reading
240
+ // files that haven't changed. Same pattern as list_tags in tools/tags.ts.
241
+ // Per-file failures are logged and skipped so one corrupt note can't poison
242
+ // the entire index.
243
+ const { contents } = await readAllCached(vaultPath, notes, (note, err) => {
244
+ log.warn("obsidian://tags resource: note read failed", { note, err });
237
245
  });
238
- for (const entry of perNote) {
239
- if (!entry)
246
+ for (const notePath of notes) {
247
+ const content = contents.get(notePath);
248
+ if (content === undefined)
240
249
  continue;
241
- for (const tag of entry.tags) {
250
+ for (const tag of extractTags(content)) {
242
251
  const normalizedTag = `#${tag}`;
243
- (tagIndex[normalizedTag] ??= []).push(entry.notePath);
252
+ (tagIndex[normalizedTag] ??= []).push(notePath);
244
253
  }
245
254
  }
246
255
  return {
@@ -277,15 +286,11 @@ export function buildMcpServer(vaultPath) {
277
286
  };
278
287
  }
279
288
  catch {
280
- return {
281
- contents: [
282
- {
283
- uri: uri.href,
284
- mimeType: "text/markdown",
285
- text: `No daily note found for today (expected at ${notePath})`,
286
- },
287
- ],
288
- };
289
+ // Throw rather than return synthetic 200 content. A successful resource
290
+ // response with body "No daily note found..." is indistinguishable to
291
+ // MCP clients from a real note whose first line happens to say the
292
+ // same thing — clients need a proper error so they can branch on it.
293
+ throw new Error(`No daily note found for today (expected at ${notePath})`);
289
294
  }
290
295
  });
291
296
  // --- Register tool groups ---