obsidian-native-mcp 1.0.2 → 1.1.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 (51) hide show
  1. package/.github/workflows/ci.yml +1 -0
  2. package/.husky/commit-msg +18 -0
  3. package/CHANGELOG.md +3 -3
  4. package/README.md +18 -11
  5. package/dist/cli/index.js +19 -2
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/handlers/prompts.js +3 -30
  8. package/dist/handlers/prompts.js.map +1 -1
  9. package/dist/handlers/tools.js +80 -7
  10. package/dist/handlers/tools.js.map +1 -1
  11. package/dist/mcp/http-transport.js +21 -3
  12. package/dist/mcp/http-transport.js.map +1 -1
  13. package/dist/mcp/protocol.js +32 -11
  14. package/dist/mcp/protocol.js.map +1 -1
  15. package/dist/mcp/server.js +170 -2
  16. package/dist/mcp/server.js.map +1 -1
  17. package/dist/mcp/stdio-transport.js +12 -4
  18. package/dist/mcp/stdio-transport.js.map +1 -1
  19. package/dist/plugin/main.js +1192 -229
  20. package/dist/plugin/main.js.map +1 -1
  21. package/dist/plugin/manifest.json +1 -1
  22. package/dist/utils/fs-utils.js +639 -172
  23. package/dist/utils/fs-utils.js.map +1 -1
  24. package/dist/utils/log.js +34 -0
  25. package/dist/utils/log.js.map +1 -0
  26. package/dist/utils/markdown.js +256 -0
  27. package/dist/utils/markdown.js.map +1 -0
  28. package/dist/utils/search.js +2 -1
  29. package/dist/utils/search.js.map +1 -1
  30. package/dist/utils/vaults.js +14 -0
  31. package/dist/utils/vaults.js.map +1 -1
  32. package/manifest.json +1 -1
  33. package/package.json +2 -1
  34. package/renovate.json +6 -0
  35. package/src/cli/index.ts +24 -2
  36. package/src/handlers/prompts.ts +1 -29
  37. package/src/handlers/tools.ts +94 -7
  38. package/src/mcp/http-transport.ts +24 -3
  39. package/src/mcp/protocol.ts +38 -12
  40. package/src/mcp/server.ts +172 -2
  41. package/src/mcp/stdio-transport.ts +16 -5
  42. package/src/plugin/main.ts +26 -2
  43. package/src/utils/fs-utils.ts +981 -200
  44. package/src/utils/log.ts +43 -0
  45. package/src/utils/markdown.ts +325 -0
  46. package/src/utils/search.ts +3 -2
  47. package/src/utils/vaults.ts +23 -0
  48. package/tests/fs-utils.test.ts +309 -0
  49. package/tests/http-transport.test.ts +111 -0
  50. package/tests/protocol.test.ts +36 -0
  51. package/tests/server-tools.test.ts +98 -0
@@ -22,6 +22,7 @@ jobs:
22
22
  - run: npm ci
23
23
  - run: npm run lint
24
24
  - run: npm run format:check
25
+ - run: npm test
25
26
  - run: npm run check
26
27
 
27
28
  build:
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env sh
2
+
3
+ message_file="$1"
4
+ subject="$(head -n 1 "$message_file")"
5
+
6
+ if printf '%s' "$subject" | grep -Eq '^(Merge|Revert )'; then
7
+ exit 0
8
+ fi
9
+
10
+ if printf '%s' "$subject" | grep -Eq '^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\([a-z0-9._/-]+\))?(!)?: .+'; then
11
+ exit 0
12
+ fi
13
+
14
+ echo "Invalid commit message format."
15
+ echo "Expected Conventional Commits, for example:"
16
+ echo " feat: add MCP file management tools"
17
+ echo " fix(cli): handle missing vault config"
18
+ exit 1
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
- ## [1.0.2](https://github.com/usrivastava92/obsidian-native-mcp/compare/v1.0.1...v1.0.2) (2026-05-14)
1
+ # [1.1.0](https://github.com/usrivastava92/obsidian-native-mcp/compare/v1.0.3...v1.1.0) (2026-05-20)
2
2
 
3
3
 
4
- ### Bug Fixes
4
+ ### Features
5
5
 
6
- * add shebang to CLI entry point for npx compatibility ([524efe1](https://github.com/usrivastava92/obsidian-native-mcp/commit/524efe136470b484eb9dd75cebf35b5dd6f1e618))
6
+ * add expanded MCP file management tools ([#11](https://github.com/usrivastava92/obsidian-native-mcp/issues/11)) ([b0ded35](https://github.com/usrivastava92/obsidian-native-mcp/commit/b0ded35492b10000998b283c1bbd1827edd28ef3))
package/README.md CHANGED
@@ -122,17 +122,24 @@ After enabling the plugin, open its settings tab. You'll see a URL like `http://
122
122
 
123
123
  ## Tools
124
124
 
125
- | Tool | Description |
126
- | ---------------- | ------------------------------------------------------- |
127
- | `list_vaults` | List all configured vaults with paths |
128
- | `get_vault_info` | Stats per vault (file count, etc.) |
129
- | `list_files` | List files/dirs in a vault directory |
130
- | `get_file` | Read file content (markdown or json with frontmatter) |
131
- | `create_file` | Create or overwrite a file |
132
- | `append_to_file` | Append content to a file |
133
- | `patch_file` | Patch by heading, block reference, or frontmatter field |
134
- | `delete_file` | Delete a file |
135
- | `search` | Full-text search across markdown files |
125
+ | Tool | Description |
126
+ | ----------------- | ------------------------------------------------------------------- |
127
+ | `list_vaults` | List all configured vaults with paths |
128
+ | `get_vault_info` | Stats per vault (file count, etc.) |
129
+ | `list_files` | List files/dirs in a vault directory, optionally recursively |
130
+ | `search_files` | Find files by exact name, substring, glob, or regex |
131
+ | `get_file` | Read file content (markdown or json with frontmatter) |
132
+ | `read_metadata` | Read frontmatter, headings, tags, aliases, and file metadata |
133
+ | `create_file` | Create or overwrite a file |
134
+ | `replace_file` | Replace full file content with explicit create-if-missing semantics |
135
+ | `append_to_file` | Append content to a file |
136
+ | `patch_file` | Patch or delete content by heading, block reference, or frontmatter |
137
+ | `replace_section` | Replace a heading section body |
138
+ | `move_file` | Move or rename a file and optionally update resolvable references |
139
+ | `delete_file` | Delete a file or move it into the vault-local `.trash` directory |
140
+ | `get_links` | Read backlinks, outlinks, or both |
141
+ | `bulk_patch` | Apply a batch of patch operations, optionally atomically |
142
+ | `search` | Full-text search across markdown files |
136
143
 
137
144
  All file tools accept an optional `vault` parameter. When only one vault is configured, it's inferred automatically.
138
145
 
package/dist/cli/index.js CHANGED
@@ -3,21 +3,38 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  const server_1 = require("../mcp/server");
5
5
  const stdio_transport_1 = require("../mcp/stdio-transport");
6
+ const log_1 = require("../utils/log");
6
7
  const vaults_1 = require("../utils/vaults");
8
+ const log = (0, log_1.createLogger)("cli");
7
9
  async function main() {
8
10
  const registry = new vaults_1.VaultRegistry();
9
11
  if (process.argv.includes("--version") || process.argv.includes("-v")) {
10
12
  console.log("0.2.0");
11
13
  process.exit(0);
12
14
  }
13
- console.error("obsidian-native-mcp server starting");
15
+ const vaults = registry.list();
16
+ const validation = registry.validate();
17
+ log.info("starting obsidian-native-mcp", {
18
+ transport: "stdio",
19
+ vaultCount: vaults.length,
20
+ source: registry.getSource(),
21
+ });
22
+ if (vaults.length === 0) {
23
+ log.warn("no vaults configured", {
24
+ hint: "Set OBSIDIAN_VAULT_PATHS or ~/.config/obsidian-native-mcp/vaults.json",
25
+ });
26
+ }
27
+ for (const vault of validation.missing) {
28
+ log.warn("configured vault path does not exist", { vault: vault.name, path: vault.path });
29
+ }
14
30
  const server = (0, server_1.createServer)(registry);
15
31
  const transport = new stdio_transport_1.StdioTransport();
16
32
  transport.onRequest(async (msg) => server.handleRequest(msg));
17
33
  transport.start();
34
+ log.info("stdio transport ready", { protocol: "jsonl" });
18
35
  }
19
36
  main().catch((err) => {
20
- console.error("Fatal error:", err);
37
+ log.error("startup failed", { error: (0, log_1.formatError)(err) });
21
38
  process.exit(1);
22
39
  });
23
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AACA,0CAA6C;AAC7C,4DAAwD;AACxD,4CAAgD;AAEhD,KAAK,UAAU,IAAI;IACjB,MAAM,QAAQ,GAAG,IAAI,sBAAa,EAAE,CAAC;IAErC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,gCAAc,EAAE,CAAC;IAEvC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AACA,0CAA6C;AAC7C,4DAAwD;AACxD,sCAAyD;AACzD,4CAAgD;AAEhD,MAAM,GAAG,GAAG,IAAA,kBAAY,EAAC,KAAK,CAAC,CAAC;AAEhC,KAAK,UAAU,IAAI;IACjB,MAAM,QAAQ,GAAG,IAAI,sBAAa,EAAE,CAAC;IAErC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAEvC,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE;QACvC,SAAS,EAAE,OAAO;QAClB,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE;KAC7B,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAC/B,IAAI,EAAE,uEAAuE;SAC9E,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,gCAAc,EAAE,CAAC;IAEvC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,SAAS,CAAC,KAAK,EAAE,CAAC;IAElB,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,IAAA,iBAAW,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -4,34 +4,7 @@ exports.PromptHandler = void 0;
4
4
  const fs_1 = require("fs");
5
5
  const promises_1 = require("fs/promises");
6
6
  const path_1 = require("path");
7
- function parseFrontmatter(content) {
8
- if (!content.startsWith("---"))
9
- return null;
10
- const endIndex = content.indexOf("---", 3);
11
- if (endIndex === -1)
12
- return null;
13
- const raw = content.slice(3, endIndex).trim();
14
- const body = content.slice(endIndex + 3).trim();
15
- const frontmatter = {};
16
- for (const line of raw.split("\n")) {
17
- const colonIndex = line.indexOf(":");
18
- if (colonIndex === -1)
19
- continue;
20
- const key = line.slice(0, colonIndex).trim();
21
- let value = line.slice(colonIndex + 1).trim();
22
- if (value.startsWith('"') && value.endsWith('"'))
23
- value = value.slice(1, -1);
24
- else if (value.startsWith("[") && value.endsWith("]")) {
25
- value = value
26
- .slice(1, -1)
27
- .split(",")
28
- .map((s) => s.trim().replace(/^["']|["']$/g, ""))
29
- .filter(Boolean);
30
- }
31
- frontmatter[key] = value;
32
- }
33
- return { frontmatter, body };
34
- }
7
+ const markdown_1 = require("../utils/markdown");
35
8
  class PromptHandler {
36
9
  registry;
37
10
  promptDir = "Prompts";
@@ -58,7 +31,7 @@ class PromptHandler {
58
31
  continue;
59
32
  try {
60
33
  const content = await (0, promises_1.readFile)(fullPath, "utf-8");
61
- const parsed = parseFrontmatter(content);
34
+ const parsed = (0, markdown_1.parseFrontmatter)(content);
62
35
  const tags = parsed?.frontmatter?.tags || [];
63
36
  if (!tags.includes("mcp-tools-prompt"))
64
37
  continue;
@@ -85,7 +58,7 @@ class PromptHandler {
85
58
  catch {
86
59
  throw new Error(`Prompt not found: ${name}`);
87
60
  }
88
- const parsed = parseFrontmatter(content);
61
+ const parsed = (0, markdown_1.parseFrontmatter)(content);
89
62
  const body = parsed?.body || content;
90
63
  const withoutFrontmatter = body.trim();
91
64
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/handlers/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/handlers/prompts.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,13 @@ class VaultFileHandler {
18
18
  append_to_file: this.handleAppendFile.bind(this),
19
19
  patch_file: this.handlePatchFile.bind(this),
20
20
  delete_file: this.handleDeleteFile.bind(this),
21
+ move_file: this.handleMoveFile.bind(this),
22
+ replace_file: this.handleReplaceFile.bind(this),
23
+ replace_section: this.handleReplaceSection.bind(this),
24
+ search_files: this.handleSearchFiles.bind(this),
25
+ read_metadata: this.handleReadMetadata.bind(this),
26
+ get_links: this.handleGetLinks.bind(this),
27
+ bulk_patch: this.handleBulkPatch.bind(this),
21
28
  search: this.handleSearch.bind(this),
22
29
  };
23
30
  }
@@ -42,7 +49,7 @@ class VaultFileHandler {
42
49
  }
43
50
  async handleListFiles(args) {
44
51
  const vaultPath = this.resolveVault(args);
45
- const entries = (0, fs_utils_1.listFiles)(vaultPath, args.directory);
52
+ const entries = (0, fs_utils_1.listFiles)(vaultPath, args.directory, args.recursive);
46
53
  return {
47
54
  content: [{ type: "text", text: JSON.stringify(entries, null, 2) }],
48
55
  };
@@ -86,19 +93,85 @@ class VaultFileHandler {
86
93
  contentType: args.contentType,
87
94
  targetDelimiter: args.targetDelimiter,
88
95
  trimTargetWhitespace: args.trimTargetWhitespace,
96
+ dryRun: args.dry_run,
89
97
  });
90
98
  return {
91
- content: [
92
- { type: "text", text: "File patched successfully" },
93
- { type: "text", text: result },
94
- ],
99
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
95
100
  };
96
101
  }
97
102
  async handleDeleteFile(args) {
98
103
  const vaultPath = this.resolveVault(args);
99
- (0, fs_utils_1.deleteFileHandler)(vaultPath, args.filename);
104
+ const result = await (0, fs_utils_1.deleteFileHandler)(vaultPath, args.filename, {
105
+ trash: args.trash,
106
+ dryRun: args.dry_run,
107
+ });
108
+ return {
109
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
110
+ };
111
+ }
112
+ async handleMoveFile(args) {
113
+ const vaultPath = this.resolveVault(args);
114
+ const result = await (0, fs_utils_1.moveFile)(vaultPath, args.from, args.to, {
115
+ updateLinks: args.update_links,
116
+ dryRun: args.dry_run,
117
+ });
118
+ return {
119
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
120
+ };
121
+ }
122
+ async handleReplaceFile(args) {
123
+ const vaultPath = this.resolveVault(args);
124
+ const result = await (0, fs_utils_1.replaceFile)(vaultPath, args.filename, args.content, {
125
+ createIfMissing: args.create_if_missing,
126
+ dryRun: args.dry_run,
127
+ });
128
+ return {
129
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
130
+ };
131
+ }
132
+ async handleReplaceSection(args) {
133
+ const vaultPath = this.resolveVault(args);
134
+ const result = await (0, fs_utils_1.replaceSection)(vaultPath, args.filename, args.heading, args.content, {
135
+ createIfMissing: args.create_if_missing,
136
+ dryRun: args.dry_run,
137
+ targetDelimiter: args.targetDelimiter,
138
+ });
139
+ return {
140
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
141
+ };
142
+ }
143
+ async handleSearchFiles(args) {
144
+ const vaultPath = this.resolveVault(args);
145
+ const result = await (0, fs_utils_1.searchFiles)(vaultPath, args.query, {
146
+ directory: args.directory,
147
+ mode: args.mode,
148
+ });
149
+ return {
150
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
151
+ };
152
+ }
153
+ async handleReadMetadata(args) {
154
+ const vaultPath = this.resolveVault(args);
155
+ const result = await (0, fs_utils_1.readMetadata)(vaultPath, args.filename);
156
+ return {
157
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
158
+ };
159
+ }
160
+ async handleGetLinks(args) {
161
+ const vaultPath = this.resolveVault(args);
162
+ const result = await (0, fs_utils_1.getLinks)(vaultPath, args.filename, args.direction || "both");
163
+ return {
164
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
165
+ };
166
+ }
167
+ async handleBulkPatch(args) {
168
+ const vaultPath = this.resolveVault(args);
169
+ const result = await (0, fs_utils_1.bulkPatch)(vaultPath, args.operations || [], {
170
+ atomic: args.atomic,
171
+ dryRun: args.dry_run,
172
+ });
100
173
  return {
101
- content: [{ type: "text", text: "File deleted successfully" }],
174
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
102
175
  };
103
176
  }
104
177
  async handleSearch(args) {
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/handlers/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/handlers/tools.ts"],"names":[],"mappings":";;;AAAA,gDAc2B;AAC3B,4CAAgD;AAMhD,MAAa,gBAAgB;IACnB,QAAQ,CAAgB;IAEhC,YAAY,QAAuB;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,WAAW;QACT,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7C,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/C,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3C,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YACvC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7C,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAChD,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3C,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7C,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/C,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;YACrD,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/C,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;YACjD,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3C,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;SACrC,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,IAAyB;QAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,KAA0B;QACvD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACpD;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,IAAyB;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACjE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,IAAyB;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAA,oBAAS,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACrE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,IAAyB;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAe,EAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE/D,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;4BACvB,WAAW,EAAE,MAAM,CAAC,WAAW;4BAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;yBACxB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,IAAyB;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAA,qBAAU,EAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC;SAC/D,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,IAAyB;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAA,qBAAU,EAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,IAAyB;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAS,EAC5B,SAAS,EACT,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ;YACE,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CACF,CAAC;QACF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,IAAyB;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAiB,EAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;YAC/D,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,IAAyB;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAQ,EAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;YAC3D,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,IAAyB;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAW,EAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;YACvE,eAAe,EAAE,IAAI,CAAC,iBAAiB;YACvC,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,IAAyB;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAc,EAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;YACxF,eAAe,EAAE,IAAI,CAAC,iBAAiB;YACvC,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,IAAyB;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAW,EAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE;YACtD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,IAAyB;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAY,EAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,IAAyB;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAQ,EAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;QAClF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,IAAyB;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAA,oBAAS,EAAC,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE;YAC/D,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,IAAyB;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,IAAA,sBAAa,EAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/F,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC;IACJ,CAAC;CACF;AAnND,4CAmNC"}
@@ -5,6 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.HttpTransport = void 0;
7
7
  const http_1 = __importDefault(require("http"));
8
+ const log_1 = require("../utils/log");
9
+ const log = (0, log_1.createLogger)("http");
8
10
  class HttpTransport {
9
11
  requestHandler = null;
10
12
  server = null;
@@ -23,16 +25,20 @@ class HttpTransport {
23
25
  // Messages sent back via SSE response, not directly
24
26
  }
25
27
  start() {
26
- return new Promise((resolve) => {
28
+ return new Promise((resolve, reject) => {
27
29
  this.server = http_1.default.createServer((req, res) => {
28
30
  this.handleRequest(req, res);
29
31
  });
32
+ this.server.on("error", (err) => {
33
+ log.error("http transport failed", { error: (0, log_1.formatError)(err) });
34
+ reject(err);
35
+ });
30
36
  this.server.listen(0, "127.0.0.1", () => {
31
37
  const addr = this.server.address();
32
38
  if (addr && typeof addr === "object") {
33
39
  this.port = addr.port;
34
40
  }
35
- console.error(`MCP HTTP server listening on http://127.0.0.1:${this.port}`);
41
+ log.info("http transport ready", { url: this.url });
36
42
  resolve();
37
43
  });
38
44
  });
@@ -62,6 +68,10 @@ class HttpTransport {
62
68
  this.handleMessage(req, res);
63
69
  }
64
70
  else {
71
+ log.warn("received request for unknown route", {
72
+ method: req.method || "UNKNOWN",
73
+ path: url.pathname,
74
+ });
65
75
  res.writeHead(404);
66
76
  res.end("Not found");
67
77
  }
@@ -75,15 +85,18 @@ class HttpTransport {
75
85
  });
76
86
  const messageUrl = `/message?session_id=${sessionId}`;
77
87
  res.write(`event: endpoint\ndata: ${messageUrl}\n\n`);
88
+ log.info("sse session opened", { sessionId });
78
89
  this.sessions.set(sessionId, res);
79
90
  req.on("close", () => {
80
91
  this.sessions.delete(sessionId);
92
+ log.info("sse session closed", { sessionId });
81
93
  });
82
94
  }
83
95
  handleMessage(req, res) {
84
96
  const url = new URL(req.url || "/", `http://${req.headers.host || "localhost"}`);
85
97
  const sessionId = url.searchParams.get("session_id");
86
98
  if (!sessionId || !this.sessions.has(sessionId)) {
99
+ log.warn("rejected message for unknown session", { sessionId: sessionId || null });
87
100
  res.writeHead(400);
88
101
  res.end("Invalid or missing session_id");
89
102
  return;
@@ -96,6 +109,7 @@ class HttpTransport {
96
109
  try {
97
110
  const msg = JSON.parse(body);
98
111
  if (msg.jsonrpc !== "2.0" || !("method" in msg) || !("id" in msg)) {
112
+ log.warn("rejected invalid json-rpc payload", { sessionId });
99
113
  res.writeHead(400);
100
114
  res.end("Invalid JSON-RPC message");
101
115
  return;
@@ -110,7 +124,11 @@ class HttpTransport {
110
124
  res.writeHead(202);
111
125
  res.end();
112
126
  }
113
- catch {
127
+ catch (err) {
128
+ log.error("failed to handle http message", {
129
+ sessionId,
130
+ error: (0, log_1.formatError)(err),
131
+ });
114
132
  res.writeHead(400);
115
133
  res.end("Invalid JSON");
116
134
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../../src/mcp/http-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../../src/mcp/http-transport.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,sCAAyD;AAEzD,MAAM,GAAG,GAAG,IAAA,kBAAY,EAAC,MAAM,CAAC,CAAC;AAEjC,MAAa,aAAa;IAChB,cAAc,GACpB,IAAI,CAAC;IACC,MAAM,GAAuB,IAAI,CAAC;IAClC,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IAClD,IAAI,GAAG,CAAC,CAAC;IAEjB,IAAI,GAAG;QACL,OAAO,oBAAoB,IAAI,CAAC,IAAI,MAAM,CAAC;IAC7C,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,SAAS,CAAC,OAAqE;QAC7E,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IAED,WAAW,CAAC,QAAyB;QACnC,oDAAoD;IACtD,CAAC;IAED,KAAK;QACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC3C,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC9B,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,IAAA,iBAAW,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChE,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;gBACtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAO,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACxB,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACpD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa,CAAC,GAAyB,EAAE,GAAwB;QACvE,kCAAkC;QAClC,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAClD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC;QACpE,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;QAE9D,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;QAEjF,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YACpD,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YAChE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,oCAAoC,EAAE;gBAC7C,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;gBAC/B,IAAI,EAAE,GAAG,CAAC,QAAQ;aACnB,CAAC,CAAC;YACH,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,GAAyB,EAAE,GAAwB;QACnE,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;QAE/B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,cAAc,EAAE,mBAAmB;YACnC,eAAe,EAAE,UAAU;YAC3B,UAAU,EAAE,YAAY;SACzB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,uBAAuB,SAAS,EAAE,CAAC;QACtD,GAAG,CAAC,KAAK,CAAC,0BAA0B,UAAU,MAAM,CAAC,CAAC;QAEtD,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAE9C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAElC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,GAAyB,EAAE,GAAwB;QACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;QACjF,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAErD,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC;YACnF,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAC/B,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;oBAClE,GAAG,CAAC,IAAI,CAAC,mCAAmC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC7D,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACnB,GAAG,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;oBACpC,OAAO;gBACT,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,GAAqB,CAAC,CAAC;gBACpE,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAC5C,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACxE,CAAC;gBACH,CAAC;gBAED,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,+BAA+B,EAAE;oBACzC,SAAS;oBACT,KAAK,EAAE,IAAA,iBAAW,EAAC,GAAG,CAAC;iBACxB,CAAC,CAAC;gBACH,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AApJD,sCAoJC;AAED,SAAS,UAAU;IACjB,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC"}
@@ -5,7 +5,8 @@ exports.sendMessage = sendMessage;
5
5
  exports.parseMessages = parseMessages;
6
6
  function encodeMessage(message) {
7
7
  const json = JSON.stringify(message);
8
- const header = `Content-Length: ${json.length}\r\n\r\n`;
8
+ const bodyLength = Buffer.byteLength(json, "utf8");
9
+ const header = `Content-Length: ${bodyLength}\r\n\r\n`;
9
10
  const encoder = new TextEncoder();
10
11
  const headerBytes = encoder.encode(header);
11
12
  const bodyBytes = encoder.encode(json);
@@ -19,20 +20,40 @@ function sendMessage(message) {
19
20
  }
20
21
  function parseMessages(buffer) {
21
22
  const messages = [];
22
- let remaining = buffer;
23
+ let offset = 0;
23
24
  while (true) {
24
- const headerMatch = remaining.match(/^Content-Length: (\d+)\r\n\r\n/);
25
- if (!headerMatch)
25
+ const headerEnd = buffer.indexOf("\r\n\r\n", offset, "utf8");
26
+ if (headerEnd === -1)
26
27
  break;
27
- const contentLength = parseInt(headerMatch[1], 10);
28
- const headerEnd = headerMatch[0].length;
29
- const totalLength = headerEnd + contentLength;
30
- if (remaining.length < totalLength)
28
+ const headerText = buffer.slice(offset, headerEnd).toString("utf8");
29
+ const headers = headerText.split("\r\n");
30
+ const contentLengthHeader = headers.find((header) => header.toLowerCase().startsWith("content-length:"));
31
+ if (!contentLengthHeader)
31
32
  break;
32
- const jsonStr = remaining.slice(headerEnd, totalLength);
33
- remaining = remaining.slice(totalLength);
33
+ const contentLength = parseInt(contentLengthHeader.slice("Content-Length:".length).trim(), 10);
34
+ if (Number.isNaN(contentLength))
35
+ break;
36
+ const bodyStart = headerEnd + 4;
37
+ const bodyEnd = bodyStart + contentLength;
38
+ if (buffer.length < bodyEnd)
39
+ break;
40
+ const jsonStr = buffer.slice(bodyStart, bodyEnd).toString("utf8");
41
+ offset = bodyEnd;
34
42
  messages.push(jsonStr);
35
43
  }
36
- return { messages, remaining };
44
+ if (messages.length > 0) {
45
+ return { messages, remaining: buffer.subarray(offset) };
46
+ }
47
+ while (true) {
48
+ const newlineIndex = buffer.indexOf("\n", offset, "utf8");
49
+ if (newlineIndex === -1)
50
+ break;
51
+ const line = buffer.slice(offset, newlineIndex).toString("utf8").trim();
52
+ offset = newlineIndex + 1;
53
+ if (!line)
54
+ continue;
55
+ messages.push(line);
56
+ }
57
+ return { messages, remaining: buffer.subarray(offset) };
37
58
  }
38
59
  //# sourceMappingURL=protocol.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/mcp/protocol.ts"],"names":[],"mappings":";;AAmCA,sCAUC;AAED,kCAEC;AAED,sCAiBC;AAjCD,SAAgB,aAAa,CAAC,OAAY;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,mBAAmB,IAAI,CAAC,MAAM,UAAU,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACvE,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,WAAW,CAAC,OAAY;IACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAgB,aAAa,CAAC,MAAc;IAC1C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,SAAS,GAAG,MAAM,CAAC;IAEvB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACtE,IAAI,CAAC,WAAW;YAAE,MAAM;QACxB,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACxC,MAAM,WAAW,GAAG,SAAS,GAAG,aAAa,CAAC;QAC9C,IAAI,SAAS,CAAC,MAAM,GAAG,WAAW;YAAE,MAAM;QAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACxD,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/mcp/protocol.ts"],"names":[],"mappings":"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"}