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.
- package/build/config.d.ts.map +1 -1
- package/build/config.js +25 -6
- package/build/config.js.map +1 -1
- package/build/http-server.d.ts +6 -5
- package/build/http-server.d.ts.map +1 -1
- package/build/http-server.js +109 -14
- package/build/http-server.js.map +1 -1
- package/build/index.d.ts +15 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +59 -54
- package/build/index.js.map +1 -1
- package/build/install.d.ts.map +1 -1
- package/build/install.js +38 -1
- package/build/install.js.map +1 -1
- package/build/lib/bases.d.ts +41 -18
- package/build/lib/bases.d.ts.map +1 -1
- package/build/lib/bases.js +304 -50
- package/build/lib/bases.js.map +1 -1
- package/build/lib/chunker.js.map +1 -1
- package/build/lib/concurrency.js.map +1 -1
- package/build/lib/dates.d.ts.map +1 -1
- package/build/lib/dates.js +59 -3
- package/build/lib/dates.js.map +1 -1
- package/build/lib/embedding-providers.d.ts.map +1 -1
- package/build/lib/embedding-providers.js +73 -9
- package/build/lib/embedding-providers.js.map +1 -1
- package/build/lib/embedding-store.d.ts +10 -0
- package/build/lib/embedding-store.d.ts.map +1 -1
- package/build/lib/embedding-store.js +153 -57
- package/build/lib/embedding-store.js.map +1 -1
- package/build/lib/index-cache.d.ts.map +1 -1
- package/build/lib/index-cache.js +95 -49
- package/build/lib/index-cache.js.map +1 -1
- package/build/lib/link-rewriter.js.map +1 -1
- package/build/lib/logger.js +4 -4
- package/build/lib/logger.js.map +1 -1
- package/build/lib/markdown.d.ts +21 -0
- package/build/lib/markdown.d.ts.map +1 -1
- package/build/lib/markdown.js +100 -1
- package/build/lib/markdown.js.map +1 -1
- package/build/lib/mime.d.ts +21 -1
- package/build/lib/mime.d.ts.map +1 -1
- package/build/lib/mime.js +66 -1
- package/build/lib/mime.js.map +1 -1
- package/build/lib/permissions.d.ts.map +1 -1
- package/build/lib/permissions.js +18 -1
- package/build/lib/permissions.js.map +1 -1
- package/build/lib/progress.d.ts +1 -1
- package/build/lib/progress.d.ts.map +1 -1
- package/build/lib/progress.js +1 -1
- package/build/lib/progress.js.map +1 -1
- package/build/lib/sections.d.ts.map +1 -1
- package/build/lib/sections.js +11 -6
- package/build/lib/sections.js.map +1 -1
- package/build/lib/tag-rewriter.d.ts +7 -0
- package/build/lib/tag-rewriter.d.ts.map +1 -1
- package/build/lib/tag-rewriter.js +110 -46
- package/build/lib/tag-rewriter.js.map +1 -1
- package/build/lib/vault.d.ts.map +1 -1
- package/build/lib/vault.js +167 -52
- package/build/lib/vault.js.map +1 -1
- package/build/tools/attachments.d.ts.map +1 -1
- package/build/tools/attachments.js +53 -7
- package/build/tools/attachments.js.map +1 -1
- package/build/tools/bases.d.ts.map +1 -1
- package/build/tools/bases.js +38 -7
- package/build/tools/bases.js.map +1 -1
- package/build/tools/canvas.d.ts.map +1 -1
- package/build/tools/canvas.js +99 -32
- package/build/tools/canvas.js.map +1 -1
- package/build/tools/links.d.ts.map +1 -1
- package/build/tools/links.js +144 -53
- package/build/tools/links.js.map +1 -1
- package/build/tools/prompts.d.ts +2 -2
- package/build/tools/prompts.d.ts.map +1 -1
- package/build/tools/prompts.js +34 -27
- package/build/tools/prompts.js.map +1 -1
- package/build/tools/read.d.ts.map +1 -1
- package/build/tools/read.js +68 -35
- package/build/tools/read.js.map +1 -1
- package/build/tools/sections.d.ts.map +1 -1
- package/build/tools/sections.js +59 -16
- package/build/tools/sections.js.map +1 -1
- package/build/tools/semantic.d.ts.map +1 -1
- package/build/tools/semantic.js +175 -136
- package/build/tools/semantic.js.map +1 -1
- package/build/tools/tags.d.ts.map +1 -1
- package/build/tools/tags.js +9 -5
- package/build/tools/tags.js.map +1 -1
- package/build/tools/write.d.ts.map +1 -1
- package/build/tools/write.js +85 -17
- package/build/tools/write.js.map +1 -1
- package/package.json +2 -2
package/build/config.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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 (
|
|
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) => {
|
package/build/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/build/http-server.d.ts
CHANGED
|
@@ -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
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
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
|
|
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"}
|
package/build/http-server.js
CHANGED
|
@@ -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
|
|
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.
|
|
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
|
|
194
|
-
//
|
|
195
|
-
|
|
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
|
-
|
|
294
|
-
|
|
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
|
}
|
package/build/http-server.js.map
CHANGED
|
@@ -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
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,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> (
|
|
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
|
-
//
|
|
230
|
-
//
|
|
231
|
-
//
|
|
232
|
-
//
|
|
233
|
-
|
|
234
|
-
|
|
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
|
|
239
|
-
|
|
246
|
+
for (const notePath of notes) {
|
|
247
|
+
const content = contents.get(notePath);
|
|
248
|
+
if (content === undefined)
|
|
240
249
|
continue;
|
|
241
|
-
for (const tag of
|
|
250
|
+
for (const tag of extractTags(content)) {
|
|
242
251
|
const normalizedTag = `#${tag}`;
|
|
243
|
-
(tagIndex[normalizedTag] ??= []).push(
|
|
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
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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 ---
|