@kwonye/mcpx 0.1.0 → 0.1.42

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 (79) hide show
  1. package/dist/adapters/claude-desktop.d.ts +8 -0
  2. package/dist/adapters/claude-desktop.js +116 -0
  3. package/dist/adapters/claude-desktop.js.map +1 -0
  4. package/dist/adapters/claude.d.ts +2 -1
  5. package/dist/adapters/claude.js +70 -23
  6. package/dist/adapters/claude.js.map +1 -1
  7. package/dist/adapters/cline.d.ts +2 -1
  8. package/dist/adapters/cline.js +72 -1
  9. package/dist/adapters/cline.js.map +1 -1
  10. package/dist/adapters/codex.d.ts +2 -1
  11. package/dist/adapters/codex.js +77 -2
  12. package/dist/adapters/codex.js.map +1 -1
  13. package/dist/adapters/cursor.d.ts +2 -1
  14. package/dist/adapters/cursor.js +72 -1
  15. package/dist/adapters/cursor.js.map +1 -1
  16. package/dist/adapters/index.js +9 -1
  17. package/dist/adapters/index.js.map +1 -1
  18. package/dist/adapters/kiro.d.ts +8 -0
  19. package/dist/adapters/kiro.js +122 -0
  20. package/dist/adapters/kiro.js.map +1 -0
  21. package/dist/adapters/opencode.d.ts +8 -0
  22. package/dist/adapters/opencode.js +124 -0
  23. package/dist/adapters/opencode.js.map +1 -0
  24. package/dist/adapters/qwen.d.ts +8 -0
  25. package/dist/adapters/qwen.js +114 -0
  26. package/dist/adapters/qwen.js.map +1 -0
  27. package/dist/adapters/{utils.d.ts → utils/index.d.ts} +9 -1
  28. package/dist/adapters/{utils.js → utils/index.js} +59 -2
  29. package/dist/adapters/utils/index.js.map +1 -0
  30. package/dist/adapters/vscode.d.ts +2 -1
  31. package/dist/adapters/vscode.js +72 -1
  32. package/dist/adapters/vscode.js.map +1 -1
  33. package/dist/cli.js +586 -23
  34. package/dist/cli.js.map +1 -1
  35. package/dist/compat/claude.d.ts +28 -0
  36. package/dist/compat/claude.js +252 -0
  37. package/dist/compat/claude.js.map +1 -0
  38. package/dist/compat/codex.d.ts +22 -0
  39. package/dist/compat/codex.js +179 -0
  40. package/dist/compat/codex.js.map +1 -0
  41. package/dist/compat/index.d.ts +28 -0
  42. package/dist/compat/index.js +108 -0
  43. package/dist/compat/index.js.map +1 -0
  44. package/dist/compat/qwen.d.ts +29 -0
  45. package/dist/compat/qwen.js +316 -0
  46. package/dist/compat/qwen.js.map +1 -0
  47. package/dist/compat/unsupported.d.ts +24 -0
  48. package/dist/compat/unsupported.js +47 -0
  49. package/dist/compat/unsupported.js.map +1 -0
  50. package/dist/compat/vscode.d.ts +21 -0
  51. package/dist/compat/vscode.js +164 -0
  52. package/dist/compat/vscode.js.map +1 -0
  53. package/dist/core/auth-probe.d.ts +9 -0
  54. package/dist/core/auth-probe.js +54 -0
  55. package/dist/core/auth-probe.js.map +1 -0
  56. package/dist/core/config.js +1 -1
  57. package/dist/core/config.js.map +1 -1
  58. package/dist/core/index.d.ts +15 -0
  59. package/dist/core/index.js +21 -0
  60. package/dist/core/index.js.map +1 -0
  61. package/dist/core/registry.d.ts +1 -0
  62. package/dist/core/registry.js +7 -0
  63. package/dist/core/registry.js.map +1 -1
  64. package/dist/core/status.d.ts +32 -0
  65. package/dist/core/status.js +63 -0
  66. package/dist/core/status.js.map +1 -0
  67. package/dist/core/sync.d.ts +2 -1
  68. package/dist/core/sync.js +70 -7
  69. package/dist/core/sync.js.map +1 -1
  70. package/dist/gateway/server.js +33 -3
  71. package/dist/gateway/server.js.map +1 -1
  72. package/dist/types.d.ts +54 -1
  73. package/dist/version.d.ts +1 -1
  74. package/dist/version.js +1 -1
  75. package/dist/version.js.map +1 -1
  76. package/package.json +14 -3
  77. package/LICENSE +0 -21
  78. package/README.md +0 -150
  79. package/dist/adapters/utils.js.map +0 -1
@@ -0,0 +1,8 @@
1
+ import type { ClientAdapter, ManagedIndex, McpxConfig, SyncClientOptions, SyncResult } from "../types.js";
2
+ export declare class ClaudeDesktopAdapter implements ClientAdapter {
3
+ readonly id: "claude-desktop";
4
+ detectConfigPath(): string | null;
5
+ supportsHttp(): boolean;
6
+ scanForImports(_config: McpxConfig, managedIndex: ManagedIndex): import("../types.js").ClientImportScanResult;
7
+ syncGateway(_config: McpxConfig, options: SyncClientOptions): SyncResult;
8
+ }
@@ -0,0 +1,116 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ import { z } from "zod";
4
+ import { readJsonFile, writeJsonAtomic } from "../util/fs.js";
5
+ import { buildImportSkip, emptyImportScan, ensureManagedEntryWritable, errorResult, isManagedGatewayProjection, okResult, pruneStaleManagedEntries, removeSourceEntries, setManagedEntries } from "./utils/index.js";
6
+ const stringMapSchema = z.record(z.string(), z.string());
7
+ const claudeDesktopEntrySchema = z.object({
8
+ type: z.string().optional(),
9
+ url: z.string().min(1).optional(),
10
+ headers: stringMapSchema.optional(),
11
+ command: z.string().min(1).optional(),
12
+ args: z.array(z.string()).optional(),
13
+ env: stringMapSchema.optional(),
14
+ cwd: z.string().min(1).optional(),
15
+ disabled: z.boolean().optional()
16
+ }).passthrough();
17
+ export class ClaudeDesktopAdapter {
18
+ id = "claude-desktop";
19
+ detectConfigPath() {
20
+ return path.join(os.homedir(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
21
+ }
22
+ supportsHttp() {
23
+ return true;
24
+ }
25
+ scanForImports(_config, managedIndex) {
26
+ const configPath = this.detectConfigPath();
27
+ const result = emptyImportScan(this.id, configPath ?? undefined);
28
+ if (!configPath) {
29
+ return result;
30
+ }
31
+ const raw = readJsonFile(configPath, {});
32
+ const topLevelServers = (raw.mcpServers ?? {});
33
+ for (const [name, rawEntry] of Object.entries(topLevelServers)) {
34
+ if (isManagedGatewayProjection(name) || managedIndex.managed[this.id]?.entries?.[name]) {
35
+ continue;
36
+ }
37
+ const parsed = claudeDesktopEntrySchema.safeParse(rawEntry);
38
+ if (!parsed.success) {
39
+ result.skipped.push(buildImportSkip(this.id, name, "Entry could not be mapped to an mcpx server.", configPath));
40
+ continue;
41
+ }
42
+ const entry = parsed.data;
43
+ if (entry.disabled) {
44
+ result.skipped.push(buildImportSkip(this.id, name, "Entry is disabled in Claude Desktop config.", configPath));
45
+ continue;
46
+ }
47
+ if ((entry.type === undefined || entry.type === "http") && entry.url && !entry.command) {
48
+ result.candidates.push({
49
+ clientId: this.id,
50
+ configPath,
51
+ sourceEntryName: name,
52
+ serverName: name,
53
+ spec: {
54
+ transport: "http",
55
+ url: entry.url,
56
+ headers: entry.headers
57
+ }
58
+ });
59
+ continue;
60
+ }
61
+ if ((entry.type === undefined || entry.type === "stdio") && entry.command && !entry.url) {
62
+ result.candidates.push({
63
+ clientId: this.id,
64
+ configPath,
65
+ sourceEntryName: name,
66
+ serverName: name,
67
+ spec: {
68
+ transport: "stdio",
69
+ command: entry.command,
70
+ args: entry.args,
71
+ env: entry.env,
72
+ cwd: entry.cwd
73
+ }
74
+ });
75
+ continue;
76
+ }
77
+ result.skipped.push(buildImportSkip(this.id, name, "Entry must define exactly one transport that mcpx supports.", configPath));
78
+ }
79
+ return result;
80
+ }
81
+ syncGateway(_config, options) {
82
+ const configPath = this.detectConfigPath();
83
+ if (!configPath) {
84
+ return errorResult(this.id, undefined, "Unable to resolve Claude Desktop config path.");
85
+ }
86
+ try {
87
+ const raw = readJsonFile(configPath, {});
88
+ const managedNames = options.managedEntries.map((entry) => entry.name);
89
+ const serverEntries = Object.fromEntries(options.managedEntries.map((entry) => [entry.name, {
90
+ type: "http",
91
+ url: entry.url,
92
+ headers: entry.headers
93
+ }]));
94
+ const topLevelServers = (raw.mcpServers ?? {});
95
+ removeSourceEntries(topLevelServers, options.sourceEntriesToRemove);
96
+ for (const name of managedNames) {
97
+ const topLevelConflict = ensureManagedEntryWritable(options.managedIndex, this.id, name, topLevelServers[name]);
98
+ if (topLevelConflict) {
99
+ return errorResult(this.id, configPath, topLevelConflict);
100
+ }
101
+ }
102
+ pruneStaleManagedEntries(options.managedIndex, this.id, topLevelServers, managedNames);
103
+ for (const [name, entry] of Object.entries(serverEntries)) {
104
+ topLevelServers[name] = entry;
105
+ }
106
+ raw.mcpServers = topLevelServers;
107
+ writeJsonAtomic(configPath, raw);
108
+ setManagedEntries(options.managedIndex, this.id, configPath, Object.fromEntries(Object.entries(serverEntries).map(([name, entry]) => [name, JSON.stringify(entry)])));
109
+ return okResult(this.id, configPath);
110
+ }
111
+ catch (error) {
112
+ return errorResult(this.id, configPath, error.message);
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=claude-desktop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-desktop.js","sourceRoot":"","sources":["../../src/adapters/claude-desktop.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import type { ClientAdapter, McpxConfig, SyncClientOptions, SyncResult } from "../types.js";
1
+ import type { ClientAdapter, ManagedIndex, McpxConfig, SyncClientOptions, SyncResult } from "../types.js";
2
2
  export declare class ClaudeAdapter implements ClientAdapter {
3
3
  readonly id: "claude";
4
4
  detectConfigPath(): string | null;
5
5
  supportsHttp(): boolean;
6
+ scanForImports(_config: McpxConfig, managedIndex: ManagedIndex): import("../types.js").ClientImportScanResult;
6
7
  syncGateway(_config: McpxConfig, options: SyncClientOptions): SyncResult;
7
8
  }
@@ -1,7 +1,19 @@
1
1
  import os from "node:os";
2
2
  import path from "node:path";
3
+ import { z } from "zod";
3
4
  import { readJsonFile, writeJsonAtomic } from "../util/fs.js";
4
- import { ensureManagedEntryWritable, errorResult, okResult, pruneStaleManagedEntries, setManagedEntries } from "./utils.js";
5
+ import { buildImportSkip, emptyImportScan, ensureManagedEntryWritable, errorResult, isManagedGatewayProjection, okResult, pruneStaleManagedEntries, removeSourceEntries, setManagedEntries } from "./utils/index.js";
6
+ const stringMapSchema = z.record(z.string(), z.string());
7
+ const claudeEntrySchema = z.object({
8
+ type: z.string().optional(),
9
+ url: z.string().min(1).optional(),
10
+ headers: stringMapSchema.optional(),
11
+ command: z.string().min(1).optional(),
12
+ args: z.array(z.string()).optional(),
13
+ env: stringMapSchema.optional(),
14
+ cwd: z.string().min(1).optional(),
15
+ disabled: z.boolean().optional()
16
+ }).passthrough();
5
17
  export class ClaudeAdapter {
6
18
  id = "claude";
7
19
  detectConfigPath() {
@@ -10,6 +22,62 @@ export class ClaudeAdapter {
10
22
  supportsHttp() {
11
23
  return true;
12
24
  }
25
+ scanForImports(_config, managedIndex) {
26
+ const configPath = this.detectConfigPath();
27
+ const result = emptyImportScan(this.id, configPath ?? undefined);
28
+ if (!configPath) {
29
+ return result;
30
+ }
31
+ const raw = readJsonFile(configPath, {});
32
+ const topLevelServers = (raw.mcpServers ?? {});
33
+ for (const [name, rawEntry] of Object.entries(topLevelServers)) {
34
+ if (isManagedGatewayProjection(name) || managedIndex.managed[this.id]?.entries?.[name]) {
35
+ continue;
36
+ }
37
+ const parsed = claudeEntrySchema.safeParse(rawEntry);
38
+ if (!parsed.success) {
39
+ result.skipped.push(buildImportSkip(this.id, name, "Entry could not be mapped to an mcpx server.", configPath));
40
+ continue;
41
+ }
42
+ const entry = parsed.data;
43
+ if (entry.disabled) {
44
+ result.skipped.push(buildImportSkip(this.id, name, "Entry is disabled in Claude config.", configPath));
45
+ continue;
46
+ }
47
+ if ((entry.type === undefined || entry.type === "http") && entry.url && !entry.command) {
48
+ result.candidates.push({
49
+ clientId: this.id,
50
+ configPath,
51
+ sourceEntryName: name,
52
+ serverName: name,
53
+ spec: {
54
+ transport: "http",
55
+ url: entry.url,
56
+ headers: entry.headers
57
+ }
58
+ });
59
+ continue;
60
+ }
61
+ if ((entry.type === undefined || entry.type === "stdio") && entry.command && !entry.url) {
62
+ result.candidates.push({
63
+ clientId: this.id,
64
+ configPath,
65
+ sourceEntryName: name,
66
+ serverName: name,
67
+ spec: {
68
+ transport: "stdio",
69
+ command: entry.command,
70
+ args: entry.args,
71
+ env: entry.env,
72
+ cwd: entry.cwd
73
+ }
74
+ });
75
+ continue;
76
+ }
77
+ result.skipped.push(buildImportSkip(this.id, name, "Entry must define exactly one transport that mcpx supports.", configPath));
78
+ }
79
+ return result;
80
+ }
13
81
  syncGateway(_config, options) {
14
82
  const configPath = this.detectConfigPath();
15
83
  if (!configPath) {
@@ -24,6 +92,7 @@ export class ClaudeAdapter {
24
92
  headers: entry.headers
25
93
  }]));
26
94
  const topLevelServers = (raw.mcpServers ?? {});
95
+ removeSourceEntries(topLevelServers, options.sourceEntriesToRemove);
27
96
  for (const name of managedNames) {
28
97
  const topLevelConflict = ensureManagedEntryWritable(options.managedIndex, this.id, name, topLevelServers[name]);
29
98
  if (topLevelConflict) {
@@ -35,28 +104,6 @@ export class ClaudeAdapter {
35
104
  topLevelServers[name] = entry;
36
105
  }
37
106
  raw.mcpServers = topLevelServers;
38
- if (raw.projects && typeof raw.projects === "object") {
39
- const projects = raw.projects;
40
- for (const [projectPath, projectValue] of Object.entries(projects)) {
41
- if (!projectValue || typeof projectValue !== "object") {
42
- continue;
43
- }
44
- const project = projectValue;
45
- const projectServers = (project.mcpServers ?? {});
46
- for (const name of managedNames) {
47
- const projectConflict = ensureManagedEntryWritable(options.managedIndex, this.id, name, projectServers[name]);
48
- if (projectConflict) {
49
- return errorResult(this.id, configPath, `${projectConflict} (project: ${projectPath})`);
50
- }
51
- }
52
- pruneStaleManagedEntries(options.managedIndex, this.id, projectServers, managedNames);
53
- for (const [name, entry] of Object.entries(serverEntries)) {
54
- projectServers[name] = entry;
55
- }
56
- project.mcpServers = projectServers;
57
- projects[projectPath] = project;
58
- }
59
- }
60
107
  writeJsonAtomic(configPath, raw);
61
108
  setManagedEntries(options.managedIndex, this.id, configPath, Object.fromEntries(Object.entries(serverEntries).map(([name, entry]) => [name, JSON.stringify(entry)])));
62
109
  return okResult(this.id, configPath);
@@ -1 +1 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import type { ClientAdapter, McpxConfig, SyncClientOptions, SyncResult } from "../types.js";
1
+ import type { ClientAdapter, ManagedIndex, McpxConfig, SyncClientOptions, SyncResult } from "../types.js";
2
2
  export declare class ClineAdapter implements ClientAdapter {
3
3
  readonly id: "cline";
4
4
  detectConfigPath(): string | null;
5
5
  supportsHttp(): boolean;
6
+ scanForImports(_config: McpxConfig, managedIndex: ManagedIndex): import("../types.js").ClientImportScanResult;
6
7
  syncGateway(_config: McpxConfig, options: SyncClientOptions): SyncResult;
7
8
  }
@@ -1,8 +1,20 @@
1
1
  import os from "node:os";
2
2
  import path from "node:path";
3
3
  import fs from "node:fs";
4
+ import { z } from "zod";
4
5
  import { readJsonFile, writeJsonAtomic } from "../util/fs.js";
5
- import { ensureManagedEntryWritable, errorResult, okResult, pruneStaleManagedEntries, setManagedEntries } from "./utils.js";
6
+ import { buildImportSkip, emptyImportScan, ensureManagedEntryWritable, errorResult, isManagedGatewayProjection, okResult, pruneStaleManagedEntries, removeSourceEntries, setManagedEntries } from "./utils/index.js";
7
+ const stringMapSchema = z.record(z.string(), z.string());
8
+ const clineEntrySchema = z.object({
9
+ transportType: z.string().optional(),
10
+ url: z.string().min(1).optional(),
11
+ headers: stringMapSchema.optional(),
12
+ command: z.string().min(1).optional(),
13
+ args: z.array(z.string()).optional(),
14
+ env: stringMapSchema.optional(),
15
+ cwd: z.string().min(1).optional(),
16
+ disabled: z.boolean().optional()
17
+ }).passthrough();
6
18
  function getCandidatePaths() {
7
19
  return [
8
20
  path.join(os.homedir(), "Library", "Application Support", "Code", "User", "globalStorage", "saoudrizwan.claude-dev", "settings", "cline_mcp_settings.json"),
@@ -23,6 +35,64 @@ export class ClineAdapter {
23
35
  supportsHttp() {
24
36
  return true;
25
37
  }
38
+ scanForImports(_config, managedIndex) {
39
+ const configPath = this.detectConfigPath();
40
+ const result = emptyImportScan(this.id, configPath ?? undefined);
41
+ if (!configPath || !fs.existsSync(configPath)) {
42
+ return result;
43
+ }
44
+ const raw = readJsonFile(configPath, {});
45
+ const servers = {
46
+ ...(raw.mcpServers ?? {})
47
+ };
48
+ for (const [name, rawEntry] of Object.entries(servers)) {
49
+ if (isManagedGatewayProjection(name) || managedIndex.managed[this.id]?.entries?.[name]) {
50
+ continue;
51
+ }
52
+ const parsed = clineEntrySchema.safeParse(rawEntry);
53
+ if (!parsed.success) {
54
+ result.skipped.push(buildImportSkip(this.id, name, "Entry could not be mapped to an mcpx server.", configPath));
55
+ continue;
56
+ }
57
+ const entry = parsed.data;
58
+ if (entry.disabled) {
59
+ result.skipped.push(buildImportSkip(this.id, name, "Entry is disabled in Cline config.", configPath));
60
+ continue;
61
+ }
62
+ if ((entry.transportType === undefined || entry.transportType === "http") && entry.url && !entry.command) {
63
+ result.candidates.push({
64
+ clientId: this.id,
65
+ configPath,
66
+ sourceEntryName: name,
67
+ serverName: name,
68
+ spec: {
69
+ transport: "http",
70
+ url: entry.url,
71
+ headers: entry.headers
72
+ }
73
+ });
74
+ continue;
75
+ }
76
+ if ((entry.transportType === undefined || entry.transportType === "stdio") && entry.command && !entry.url) {
77
+ result.candidates.push({
78
+ clientId: this.id,
79
+ configPath,
80
+ sourceEntryName: name,
81
+ serverName: name,
82
+ spec: {
83
+ transport: "stdio",
84
+ command: entry.command,
85
+ args: entry.args,
86
+ env: entry.env,
87
+ cwd: entry.cwd
88
+ }
89
+ });
90
+ continue;
91
+ }
92
+ result.skipped.push(buildImportSkip(this.id, name, "Entry must define exactly one transport that mcpx supports.", configPath));
93
+ }
94
+ return result;
95
+ }
26
96
  syncGateway(_config, options) {
27
97
  const configPath = this.detectConfigPath();
28
98
  if (!configPath) {
@@ -33,6 +103,7 @@ export class ClineAdapter {
33
103
  const servers = {
34
104
  ...(raw.mcpServers ?? {})
35
105
  };
106
+ removeSourceEntries(servers, options.sourceEntriesToRemove);
36
107
  const managedNames = options.managedEntries.map((entry) => entry.name);
37
108
  const serverEntries = Object.fromEntries(options.managedEntries.map((entry) => [entry.name, {
38
109
  transportType: "http",
@@ -1 +1 @@
1
- {"version":3,"file":"cline.js","sourceRoot":"","sources":["../../src/adapters/cline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cline.js","sourceRoot":"","sources":["../../src/adapters/cline.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import type { ClientAdapter, McpxConfig, SyncClientOptions, SyncResult } from "../types.js";
1
+ import type { ClientAdapter, ManagedIndex, McpxConfig, SyncClientOptions, SyncResult } from "../types.js";
2
2
  export declare class CodexAdapter implements ClientAdapter {
3
3
  readonly id: "codex";
4
4
  detectConfigPath(): string | null;
5
5
  supportsHttp(): boolean;
6
+ scanForImports(_config: McpxConfig, managedIndex: ManagedIndex): import("../types.js").ClientImportScanResult;
6
7
  syncGateway(_config: McpxConfig, options: SyncClientOptions): SyncResult;
7
8
  }
@@ -2,7 +2,24 @@ import os from "node:os";
2
2
  import path from "node:path";
3
3
  import fs from "node:fs";
4
4
  import { parse, stringify } from "@iarna/toml";
5
- import { ensureManagedEntryWritable, errorResult, okResult, pruneStaleManagedEntries, setManagedEntries } from "./utils.js";
5
+ import { z } from "zod";
6
+ import { buildImportSkip, emptyImportScan, ensureManagedEntryWritable, errorResult, isManagedGatewayProjection, okResult, pruneStaleManagedEntries, removeSourceEntries, setManagedEntries } from "./utils/index.js";
7
+ const stringMapSchema = z.preprocess((value) => {
8
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
9
+ return value;
10
+ }
11
+ return Object.fromEntries(Object.entries(value));
12
+ }, z.record(z.string(), z.string()));
13
+ const codexEntrySchema = z.object({
14
+ enabled: z.boolean().optional(),
15
+ url: z.string().min(1).optional(),
16
+ headers: stringMapSchema.optional(),
17
+ http_headers: stringMapSchema.optional(),
18
+ command: z.string().min(1).optional(),
19
+ args: z.array(z.string()).optional(),
20
+ env: stringMapSchema.optional(),
21
+ cwd: z.string().min(1).optional()
22
+ }).passthrough();
6
23
  export class CodexAdapter {
7
24
  id = "codex";
8
25
  detectConfigPath() {
@@ -11,6 +28,63 @@ export class CodexAdapter {
11
28
  supportsHttp() {
12
29
  return true;
13
30
  }
31
+ scanForImports(_config, managedIndex) {
32
+ const configPath = this.detectConfigPath();
33
+ const result = emptyImportScan(this.id, configPath ?? undefined);
34
+ if (!configPath || !fs.existsSync(configPath)) {
35
+ return result;
36
+ }
37
+ const existing = fs.readFileSync(configPath, "utf8");
38
+ const doc = existing.trim().length > 0 ? parse(existing) : {};
39
+ const mcpServers = (doc.mcp_servers ?? {});
40
+ for (const [name, rawEntry] of Object.entries(mcpServers)) {
41
+ if (isManagedGatewayProjection(name) || managedIndex.managed[this.id]?.entries?.[name]) {
42
+ continue;
43
+ }
44
+ const parsed = codexEntrySchema.safeParse(rawEntry);
45
+ if (!parsed.success) {
46
+ result.skipped.push(buildImportSkip(this.id, name, "Entry could not be mapped to an mcpx server.", configPath));
47
+ continue;
48
+ }
49
+ const entry = parsed.data;
50
+ if (entry.enabled === false) {
51
+ result.skipped.push(buildImportSkip(this.id, name, "Entry is disabled in Codex config.", configPath));
52
+ continue;
53
+ }
54
+ if (entry.url && !entry.command) {
55
+ result.candidates.push({
56
+ clientId: this.id,
57
+ configPath,
58
+ sourceEntryName: name,
59
+ serverName: name,
60
+ spec: {
61
+ transport: "http",
62
+ url: entry.url,
63
+ headers: entry.http_headers ?? entry.headers
64
+ }
65
+ });
66
+ continue;
67
+ }
68
+ if (entry.command && !entry.url) {
69
+ result.candidates.push({
70
+ clientId: this.id,
71
+ configPath,
72
+ sourceEntryName: name,
73
+ serverName: name,
74
+ spec: {
75
+ transport: "stdio",
76
+ command: entry.command,
77
+ args: entry.args,
78
+ env: entry.env,
79
+ cwd: entry.cwd
80
+ }
81
+ });
82
+ continue;
83
+ }
84
+ result.skipped.push(buildImportSkip(this.id, name, "Entry must define exactly one transport that mcpx supports.", configPath));
85
+ }
86
+ return result;
87
+ }
14
88
  syncGateway(_config, options) {
15
89
  const configPath = this.detectConfigPath();
16
90
  if (!configPath) {
@@ -20,11 +94,12 @@ export class CodexAdapter {
20
94
  const existing = fs.existsSync(configPath) ? fs.readFileSync(configPath, "utf8") : "";
21
95
  const doc = existing.trim().length > 0 ? parse(existing) : {};
22
96
  const mcpServers = (doc.mcp_servers ?? {});
97
+ removeSourceEntries(mcpServers, options.sourceEntriesToRemove);
23
98
  const managedNames = options.managedEntries.map((entry) => entry.name);
24
99
  const serverEntries = Object.fromEntries(options.managedEntries.map((entry) => [entry.name, {
25
100
  enabled: true,
26
101
  url: entry.url,
27
- headers: entry.headers
102
+ http_headers: entry.headers
28
103
  }]));
29
104
  for (const name of managedNames) {
30
105
  const conflict = ensureManagedEntryWritable(options.managedIndex, this.id, name, mcpServers[name]);
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import type { ClientAdapter, McpxConfig, SyncClientOptions, SyncResult } from "../types.js";
1
+ import type { ClientAdapter, ManagedIndex, McpxConfig, SyncClientOptions, SyncResult } from "../types.js";
2
2
  export declare class CursorAdapter implements ClientAdapter {
3
3
  readonly id: "cursor";
4
4
  detectConfigPath(): string | null;
5
5
  supportsHttp(): boolean;
6
+ scanForImports(_config: McpxConfig, managedIndex: ManagedIndex): import("../types.js").ClientImportScanResult;
6
7
  syncGateway(_config: McpxConfig, options: SyncClientOptions): SyncResult;
7
8
  }