obsidian-native-mcp 1.3.0 → 1.4.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/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
- # [1.3.0](https://github.com/usrivastava92/obsidian-native-mcp/compare/v1.2.0...v1.3.0) (2026-05-23)
1
+ # [1.4.0](https://github.com/usrivastava92/obsidian-native-mcp/compare/v1.3.0...v1.4.0) (2026-05-23)
2
2
 
3
3
 
4
4
  ### Features
5
5
 
6
- * v1.0 complete rewrite LLM-optimized MCP server ([60b0bd0](https://github.com/usrivastava92/obsidian-native-mcp/commit/60b0bd0aa65a015768c89925a7e9109a0c91b305))
6
+ * cooperative budgets + deadlines for long-walk tools ([d99e871](https://github.com/usrivastava92/obsidian-native-mcp/commit/d99e8717c3dcec0199cb9084fd264f509c8f679c))
package/README.md CHANGED
@@ -64,6 +64,15 @@ npm run build
64
64
 
65
65
  Auto-discovers all your Obsidian vaults from Obsidian's own config. Pick which to expose in plugin settings. Plugin also surfaces a bearer token and the MCP URL.
66
66
 
67
+ A **Performance budgets** section in plugin settings lets you cap long-running operations. All limits default to `0 = unlimited` — raise or lower them freely without restriction.
68
+
69
+ | Setting | Description |
70
+ | ----------------- | ------------------------------------------------------------------------------ |
71
+ | Max files scanned | Max `.md` files scanned per `search.content` / `vault.info` call |
72
+ | Max bytes read | Max raw bytes of file content read per call |
73
+ | Max bulk ops | Max ops accepted by a single `bulk.apply` call |
74
+ | Deadline (ms) | Wall-clock time limit for long-walk tools (best-effort; checked once per file) |
75
+
67
76
  ### CLI
68
77
 
69
78
  Either an env var or a config file.
@@ -95,6 +104,19 @@ obsidian-native-mcp --vault notes=/path # ad-hoc named vault
95
104
  obsidian-native-mcp --config ./my.json # explicit config file
96
105
  ```
97
106
 
107
+ #### Performance budget env vars
108
+
109
+ All default to `0` (unlimited). Set any to a positive integer to cap that resource:
110
+
111
+ ```bash
112
+ MCP_MAX_FILES_SCANNED=500 # files per search.content / vault.info call
113
+ MCP_MAX_BYTES_READ=10000000 # raw bytes per call (~10 MB)
114
+ MCP_MAX_BULK_OPS=50 # ops per bulk.apply call
115
+ MCP_DEADLINE_MS=30000 # wall-clock ms ceiling for long-walk tools
116
+ ```
117
+
118
+ These are _defaults_ — they are never enforced as hard system limits. Set them to whatever makes sense for your vault and workflow.
119
+
98
120
  ## Usage
99
121
 
100
122
  ### Obsidian plugin
@@ -135,7 +157,7 @@ All tools accept an optional `vault` parameter; with a single vault configured,
135
157
  | Tool | What it returns | Notes |
136
158
  | ----------------- | ------------------------------------------------ | ------------------------------------------------ |
137
159
  | `vault.list` | All configured vaults | — |
138
- | `vault.info` | Stats per vault | |
160
+ | `vault.info` | Stats per vault | `_budget` supported |
139
161
  | `file.list` | Paged file listing | `recursive`, `pattern` (glob), `limit`, `offset` |
140
162
  | `file.find` | Find files by name | exact / substring / glob / regex |
141
163
  | `file.read` | Full file content + `contentHash` + `totalLines` | Use freely — guidelines/AGENTS.md/etc. |
@@ -147,7 +169,7 @@ All tools accept an optional `vault` parameter; with a single vault configured,
147
169
  | `tags.list` | Tags from frontmatter + body | Code-fence aware |
148
170
  | `links.get` | Outlinks, backlinks, or both | Typed: wiki/embed/header/block/markdown |
149
171
  | `metadata.read` | Frontmatter + headings + tags + links + hashes | One-shot context dump |
150
- | `search.content` | Paged full-text matches with per-line hashes | DSL: `tag:`, `path:`, `\"phrase\"`, AND/OR/NOT |
172
+ | `search.content` | Paged full-text matches with per-line hashes | `_budget` supported; pre-filters before parse |
151
173
 
152
174
  ### Write tools — surgical primaries
153
175
 
@@ -182,11 +204,39 @@ All tools accept an optional `vault` parameter; with a single vault configured,
182
204
 
183
205
  ### Power & batch
184
206
 
185
- | Tool | Notes |
186
- | --------------- | ------------------------------------------------------------------------- |
187
- | `bulk.apply` | Multi-file, multi-op batch. `atomic: true` → snapshot + rollback on error |
188
- | `regex.replace` | Two-step: server returns proposal token + diff → caller confirms |
189
- | `file.diff` | Diff between two `contentHash` versions (when cache has them) |
207
+ | Tool | Notes |
208
+ | --------------- | ------------------------------------------------------------------------------------- |
209
+ | `bulk.apply` | Multi-file, multi-op batch. `atomic: true` → snapshot + rollback. `_budget` supported |
210
+ | `regex.replace` | Two-step: server returns proposal token + diff → caller confirms |
211
+ | `file.diff` | Diff between two `contentHash` versions (when cache has them) |
212
+
213
+ ### Per-call budget overrides (`_budget`)
214
+
215
+ `vault.info`, `search.content`, and `bulk.apply` all accept an optional `_budget` object that overrides the server-level config **for that single call only**. This lets an AI agent tighten or relax limits based on what it knows about the task:
216
+
217
+ ```json
218
+ {
219
+ "tool": "search.content",
220
+ "arguments": {
221
+ "query": "important term",
222
+ "directory": "Projects/",
223
+ "_budget": {
224
+ "maxFilesScanned": 200,
225
+ "maxBytesRead": 5000000,
226
+ "deadlineMs": 10000
227
+ }
228
+ }
229
+ }
230
+ ```
231
+
232
+ | Field | Applies to | Description |
233
+ | ----------------- | ------------------------------ | --------------------------------------------------- |
234
+ | `maxFilesScanned` | `vault.info`, `search.content` | Max `.md` files to scan this call (0 = unlimited) |
235
+ | `maxBytesRead` | `vault.info`, `search.content` | Max raw bytes to read this call (0 = unlimited) |
236
+ | `deadlineMs` | `vault.info`, `search.content` | Wall-clock limit in ms for this call (0 = no limit) |
237
+ | `maxBulkOps` | `bulk.apply` | Max ops for this batch (0 = unlimited) |
238
+
239
+ When a budget is hit, the tool returns `truncated: true` with a `hint` and (for `search.content`) a `nextOffset` the agent can use to resume pagination. No error is thrown — the agent gets partial results and can decide what to do next.
190
240
 
191
241
  ### Prompts
192
242
 
@@ -233,6 +283,29 @@ Every mutating call appends one JSONL line to `<vault>/.obsidian/plugins/obsidia
233
283
  }
234
284
  ```
235
285
 
286
+ Long-walk tools (`search.content`, `vault.info`) also emit telemetry fields:
287
+
288
+ ```json
289
+ {
290
+ "ts": "2026-05-21T13:00:01Z",
291
+ "tool": "search.content",
292
+ "vault": "notes",
293
+ "duration_ms": 412,
294
+ "files_scanned": 347,
295
+ "bytes_read": 2891024,
296
+ "truncated": true,
297
+ "abort_reason": "budget"
298
+ }
299
+ ```
300
+
301
+ | Field | Description |
302
+ | --------------- | ---------------------------------------------------------------------------- |
303
+ | `duration_ms` | Wall-clock time for the operation in milliseconds |
304
+ | `files_scanned` | Number of `.md` files read (after pre-filter; excludes cache hits on misses) |
305
+ | `bytes_read` | Raw bytes of file content read before mdast parsing |
306
+ | `truncated` | `true` if the operation was cut short by a budget or deadline |
307
+ | `abort_reason` | `"budget"` · `"deadline"` · `"cancelled"` — why it stopped early |
308
+
236
309
  Rotates at 5 MB by default.
237
310
 
238
311
  ## Security
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/audit/log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/audit/log.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -22,6 +22,7 @@ import { AuditLog } from "../audit/log.js";
22
22
  import { ToolRegistry } from "../handlers/registry.js";
23
23
  import { registerAll } from "../tools/index.js";
24
24
  import { FsPromptsProvider } from "../prompts/provider.js";
25
+ import { configFromEnv } from "../config.js";
25
26
  function parseFlags(argv) {
26
27
  const flags = { readOnly: false, initialVaults: [] };
27
28
  for (let i = 0; i < argv.length; i++) {
@@ -82,6 +83,7 @@ async function main() {
82
83
  const toolReg = new ToolRegistry();
83
84
  registerAll(toolReg);
84
85
  const promptsProvider = new FsPromptsProvider(registry);
86
+ const serverConfig = configFromEnv();
85
87
  // ------------------------------------------------------------------
86
88
  // Wire everything into the official MCP SDK Server
87
89
  // ------------------------------------------------------------------
@@ -98,7 +100,7 @@ async function main() {
98
100
  return { tools };
99
101
  });
100
102
  // tools/call
101
- server.setRequestHandler(CallToolRequestSchema, async (req) => {
103
+ server.setRequestHandler(CallToolRequestSchema, async (req, extra) => {
102
104
  const name = req.params.name;
103
105
  const args = (req.params.arguments ?? {});
104
106
  const vaultName = typeof args.vault === "string" ? args.vault : undefined;
@@ -112,17 +114,46 @@ async function main() {
112
114
  content: [{ type: "text", text: e.message }],
113
115
  };
114
116
  }
115
- const ctx = { vault, perms, cache, audit, registry, clientId: "stdio" };
116
- const result = await toolReg.invoke(name, args, ctx);
117
- if (!result.ok) {
117
+ // The SDK passes an AbortSignal via extra.signal when the client sends
118
+ // notifications/cancelled. Wire a deadline on top if configured.
119
+ const ac = new AbortController();
120
+ const sdkSignal = extra.signal;
121
+ if (sdkSignal) {
122
+ if (sdkSignal.aborted)
123
+ ac.abort(sdkSignal.reason);
124
+ else
125
+ sdkSignal.addEventListener("abort", () => ac.abort(sdkSignal.reason), { once: true });
126
+ }
127
+ let deadlineTimer;
128
+ if (serverConfig.deadlineMs > 0) {
129
+ deadlineTimer = setTimeout(() => ac.abort("deadline"), serverConfig.deadlineMs);
130
+ }
131
+ const ctx = {
132
+ vault,
133
+ perms,
134
+ cache,
135
+ audit,
136
+ registry,
137
+ clientId: "stdio",
138
+ config: serverConfig,
139
+ signal: ac.signal,
140
+ };
141
+ try {
142
+ const result = await toolReg.invoke(name, args, ctx);
143
+ if (!result.ok) {
144
+ return {
145
+ isError: true,
146
+ content: [{ type: "text", text: JSON.stringify(result.error) }],
147
+ };
148
+ }
118
149
  return {
119
- isError: true,
120
- content: [{ type: "text", text: JSON.stringify(result.error) }],
150
+ content: [{ type: "text", text: JSON.stringify(result.result) }],
121
151
  };
122
152
  }
123
- return {
124
- content: [{ type: "text", text: JSON.stringify(result.result) }],
125
- };
153
+ finally {
154
+ if (deadlineTimer !== undefined)
155
+ clearTimeout(deadlineTimer);
156
+ }
126
157
  });
127
158
  // prompts/list
128
159
  server.setRequestHandler(ListPromptsRequestSchema, async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
package/dist/config.js ADDED
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Server-wide resource budget configuration.
3
+ *
4
+ * All limits default to 0 which means "unlimited". Operators set them via:
5
+ * - CLI: environment variables (MCP_MAX_FILES_SCANNED, etc.)
6
+ * - Plugin: PluginSettings.budgets (stored in Obsidian data.json)
7
+ *
8
+ * These are *defaults* — users are free to raise or lower them. We never
9
+ * enforce an upper bound on a user-supplied value.
10
+ */
11
+ export const DEFAULT_CONFIG = {
12
+ maxFilesScanned: 0,
13
+ maxBytesRead: 0,
14
+ maxBulkOps: 0,
15
+ deadlineMs: 0,
16
+ };
17
+ /**
18
+ * Read config from environment variables. Missing / non-numeric values fall
19
+ * back to the supplied defaults (typically DEFAULT_CONFIG).
20
+ */
21
+ export function configFromEnv(base = DEFAULT_CONFIG) {
22
+ function readInt(key, fallback) {
23
+ const raw = process.env[key];
24
+ if (raw === undefined || raw === "")
25
+ return fallback;
26
+ const n = parseInt(raw, 10);
27
+ return Number.isFinite(n) && n >= 0 ? n : fallback;
28
+ }
29
+ return {
30
+ maxFilesScanned: readInt("MCP_MAX_FILES_SCANNED", base.maxFilesScanned),
31
+ maxBytesRead: readInt("MCP_MAX_BYTES_READ", base.maxBytesRead),
32
+ maxBulkOps: readInt("MCP_MAX_BULK_OPS", base.maxBulkOps),
33
+ deadlineMs: readInt("MCP_DEADLINE_MS", base.deadlineMs),
34
+ };
35
+ }
36
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA6BH,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,eAAe,EAAE,CAAC;IAClB,YAAY,EAAE,CAAC;IACf,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,CAAC;CACd,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAqB,cAAc;IAC/D,SAAS,OAAO,CAAC,GAAW,EAAE,QAAgB;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,QAAQ,CAAC;QACrD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrD,CAAC;IACD,OAAO;QACL,eAAe,EAAE,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,eAAe,CAAC;QACvE,YAAY,EAAE,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,YAAY,CAAC;QAC9D,UAAU,EAAE,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC;QACxD,UAAU,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC;KACxD,CAAC;AACJ,CAAC"}
package/dist/fs/walk.js CHANGED
@@ -15,9 +15,11 @@ export async function* walk(rootAbs, options = {}) {
15
15
  const extSet = options.extensions
16
16
  ? new Set(options.extensions.map((e) => e.toLowerCase().replace(/^\./, "")))
17
17
  : null;
18
- yield* walkInner(rootAbs, rootAbs, 0, ignore, maxDepth, extSet, options.filter);
18
+ yield* walkInner(rootAbs, rootAbs, 0, ignore, maxDepth, extSet, options.filter, options.signal);
19
19
  }
20
- async function* walkInner(rootAbs, curAbs, depth, ignore, maxDepth, extSet, filter) {
20
+ async function* walkInner(rootAbs, curAbs, depth, ignore, maxDepth, extSet, filter, signal) {
21
+ if (signal?.aborted)
22
+ return;
21
23
  let entries;
22
24
  try {
23
25
  entries = await fs.readdir(curAbs, { withFileTypes: true });
@@ -26,6 +28,8 @@ async function* walkInner(rootAbs, curAbs, depth, ignore, maxDepth, extSet, filt
26
28
  return;
27
29
  }
28
30
  for (const ent of entries) {
31
+ if (signal?.aborted)
32
+ return;
29
33
  if (ignore.has(ent.name))
30
34
  continue;
31
35
  const childAbs = path.join(curAbs, ent.name);
@@ -46,7 +50,7 @@ async function* walkInner(rootAbs, curAbs, depth, ignore, maxDepth, extSet, filt
46
50
  if (!filter || filter(e))
47
51
  yield e;
48
52
  if (depth < maxDepth) {
49
- yield* walkInner(rootAbs, childAbs, depth + 1, ignore, maxDepth, extSet, filter);
53
+ yield* walkInner(rootAbs, childAbs, depth + 1, ignore, maxDepth, extSet, filter, signal);
50
54
  }
51
55
  }
52
56
  else if (ent.isFile()) {
@@ -1 +1 @@
1
- {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/fs/walk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/fs/walk.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/handlers/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAyChD,MAAM,OAAO,YAAY;IACf,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAElD,QAAQ,CAAO,GAAyB;QACtC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAgC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,aAAyC;QAC5C,MAAM,GAAG,GAAqB,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,SAAS;YACtD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,MAAM,CACV,IAAY,EACZ,IAA6B,EAC7B,GAAgB;QAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE;aAClE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAa,EAAE,GAAG,CAAC,CAAC;YACrD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;gBAC/B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,CAAC;YACD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAG,GAAa,CAAC,OAAO,EAAE;aAC7D,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/handlers/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA8ChD,MAAM,OAAO,YAAY;IACf,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAElD,QAAQ,CAAO,GAAyB;QACtC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAgC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,aAAyC;QAC5C,MAAM,GAAG,GAAqB,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,SAAS;YACtD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,MAAM,CACV,IAAY,EACZ,IAA6B,EAC7B,GAAgB;QAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE;aAClE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAa,EAAE,GAAG,CAAC,CAAC;YACrD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;gBAC/B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,CAAC;YACD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAG,GAAa,CAAC,OAAO,EAAE;aAC7D,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -13,7 +13,11 @@
13
13
  * - prompts/get
14
14
  */
15
15
  import { failure, success, ErrorCode, } from "./protocol.js";
16
+ import { DEFAULT_CONFIG } from "../config.js";
16
17
  export function createServer(opts) {
18
+ const serverConfig = opts.config ?? DEFAULT_CONFIG;
19
+ // Track in-flight requests so notifications/cancelled can abort them.
20
+ const inFlight = new Map();
17
21
  return {
18
22
  async handleRequest(req, clientId) {
19
23
  // Notifications: respond with null (transport will ack but not send).
@@ -33,6 +37,14 @@ export function createServer(opts) {
33
37
  });
34
38
  case "notifications/initialized":
35
39
  return null;
40
+ case "notifications/cancelled": {
41
+ // MCP cancellation: abort the matching in-flight request if present.
42
+ const p = (req.params ?? {});
43
+ if (p.requestId != null) {
44
+ inFlight.get(p.requestId)?.abort("cancelled");
45
+ }
46
+ return null;
47
+ }
36
48
  case "tools/list": {
37
49
  const tools = opts.tools
38
50
  .list((name) => opts.perms.isToolEnabled(name))
@@ -56,6 +68,16 @@ export function createServer(opts) {
56
68
  catch (e) {
57
69
  return failure(req.id ?? null, ErrorCode.InvalidParams, e.message);
58
70
  }
71
+ // Build AbortController: fired by notifications/cancelled or deadline.
72
+ const ac = new AbortController();
73
+ const reqId = req.id;
74
+ if (reqId != null)
75
+ inFlight.set(reqId, ac);
76
+ // Optional wall-clock deadline — wired to same AbortController.
77
+ let deadlineTimer;
78
+ if (serverConfig.deadlineMs > 0) {
79
+ deadlineTimer = setTimeout(() => ac.abort("deadline"), serverConfig.deadlineMs);
80
+ }
59
81
  const ctx = {
60
82
  vault,
61
83
  perms: opts.perms,
@@ -63,17 +85,27 @@ export function createServer(opts) {
63
85
  audit: opts.audit,
64
86
  registry: opts.registry,
65
87
  clientId,
88
+ config: serverConfig,
89
+ signal: ac.signal,
66
90
  };
67
- const result = await opts.tools.invoke(name, args, ctx);
68
- if (!result.ok) {
91
+ try {
92
+ const result = await opts.tools.invoke(name, args, ctx);
93
+ if (!result.ok) {
94
+ return success(req.id ?? null, {
95
+ isError: true,
96
+ content: [{ type: "text", text: JSON.stringify(result.error) }],
97
+ });
98
+ }
69
99
  return success(req.id ?? null, {
70
- isError: true,
71
- content: [{ type: "text", text: JSON.stringify(result.error) }],
100
+ content: [{ type: "text", text: JSON.stringify(result.result) }],
72
101
  });
73
102
  }
74
- return success(req.id ?? null, {
75
- content: [{ type: "text", text: JSON.stringify(result.result) }],
76
- });
103
+ finally {
104
+ if (deadlineTimer !== undefined)
105
+ clearTimeout(deadlineTimer);
106
+ if (reqId != null)
107
+ inFlight.delete(reqId);
108
+ }
77
109
  }
78
110
  case "prompts/list": {
79
111
  if (!opts.promptsProvider) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}