@kwonye/mcpx 0.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 (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +150 -0
  3. package/dist/adapters/claude.d.ts +7 -0
  4. package/dist/adapters/claude.js +69 -0
  5. package/dist/adapters/claude.js.map +1 -0
  6. package/dist/adapters/cline.d.ts +7 -0
  7. package/dist/adapters/cline.js +65 -0
  8. package/dist/adapters/cline.js.map +1 -0
  9. package/dist/adapters/codex.d.ts +7 -0
  10. package/dist/adapters/codex.js +52 -0
  11. package/dist/adapters/codex.js.map +1 -0
  12. package/dist/adapters/cursor.d.ts +7 -0
  13. package/dist/adapters/cursor.js +52 -0
  14. package/dist/adapters/cursor.js.map +1 -0
  15. package/dist/adapters/index.d.ts +2 -0
  16. package/dist/adapters/index.js +15 -0
  17. package/dist/adapters/index.js.map +1 -0
  18. package/dist/adapters/utils.d.ts +10 -0
  19. package/dist/adapters/utils.js +69 -0
  20. package/dist/adapters/utils.js.map +1 -0
  21. package/dist/adapters/vscode.d.ts +7 -0
  22. package/dist/adapters/vscode.js +52 -0
  23. package/dist/adapters/vscode.js.map +1 -0
  24. package/dist/cli.d.ts +2 -0
  25. package/dist/cli.js +577 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/core/config.d.ts +4 -0
  28. package/dist/core/config.js +71 -0
  29. package/dist/core/config.js.map +1 -0
  30. package/dist/core/daemon.d.ts +25 -0
  31. package/dist/core/daemon.js +174 -0
  32. package/dist/core/daemon.js.map +1 -0
  33. package/dist/core/managed-index.d.ts +4 -0
  34. package/dist/core/managed-index.js +22 -0
  35. package/dist/core/managed-index.js.map +1 -0
  36. package/dist/core/paths.d.ts +12 -0
  37. package/dist/core/paths.js +46 -0
  38. package/dist/core/paths.js.map +1 -0
  39. package/dist/core/registry.d.ts +7 -0
  40. package/dist/core/registry.js +33 -0
  41. package/dist/core/registry.js.map +1 -0
  42. package/dist/core/secrets.d.ts +16 -0
  43. package/dist/core/secrets.js +108 -0
  44. package/dist/core/secrets.js.map +1 -0
  45. package/dist/core/server-auth.d.ts +19 -0
  46. package/dist/core/server-auth.js +112 -0
  47. package/dist/core/server-auth.js.map +1 -0
  48. package/dist/core/sync.d.ts +9 -0
  49. package/dist/core/sync.js +63 -0
  50. package/dist/core/sync.js.map +1 -0
  51. package/dist/gateway/server.d.ts +9 -0
  52. package/dist/gateway/server.js +960 -0
  53. package/dist/gateway/server.js.map +1 -0
  54. package/dist/types.d.ts +86 -0
  55. package/dist/types.js +2 -0
  56. package/dist/types.js.map +1 -0
  57. package/dist/util/fs.d.ts +4 -0
  58. package/dist/util/fs.js +34 -0
  59. package/dist/util/fs.js.map +1 -0
  60. package/dist/version.d.ts +1 -0
  61. package/dist/version.js +2 -0
  62. package/dist/version.js.map +1 -0
  63. package/package.json +60 -0
@@ -0,0 +1,112 @@
1
+ function normalizeNamePart(value) {
2
+ return value
3
+ .trim()
4
+ .toLowerCase()
5
+ .replace(/[^a-z0-9._-]+/g, "_")
6
+ .replace(/^_+|_+$/g, "") || "value";
7
+ }
8
+ function requireNonEmpty(value, label) {
9
+ const normalized = value?.trim();
10
+ if (!normalized) {
11
+ throw new Error(`${label} must be non-empty.`);
12
+ }
13
+ return normalized;
14
+ }
15
+ export function toSecretRef(secretName) {
16
+ return `secret://${secretName}`;
17
+ }
18
+ export function secretRefName(ref) {
19
+ if (!ref.startsWith("secret://")) {
20
+ return null;
21
+ }
22
+ const name = ref.slice("secret://".length).trim();
23
+ return name.length > 0 ? name : null;
24
+ }
25
+ export function defaultAuthSecretName(serverName, target) {
26
+ return `auth_${normalizeNamePart(serverName)}_${target.kind}_${normalizeNamePart(target.key)}`;
27
+ }
28
+ export function resolveAuthTarget(spec, header, env) {
29
+ if (spec.transport === "http") {
30
+ if (env) {
31
+ throw new Error("--env is only valid for stdio upstreams.");
32
+ }
33
+ return {
34
+ kind: "header",
35
+ key: requireNonEmpty(header ?? "Authorization", "Header name")
36
+ };
37
+ }
38
+ if (header) {
39
+ throw new Error("--header is only valid for HTTP upstreams.");
40
+ }
41
+ return {
42
+ kind: "env",
43
+ key: requireNonEmpty(env, "Env var name")
44
+ };
45
+ }
46
+ export function applyAuthReference(spec, target, secretRef) {
47
+ if (target.kind === "header") {
48
+ if (spec.transport !== "http") {
49
+ throw new Error(`Cannot set header auth on ${spec.transport} upstream.`);
50
+ }
51
+ const headers = { ...(spec.headers ?? {}) };
52
+ headers[target.key] = secretRef;
53
+ spec.headers = headers;
54
+ return;
55
+ }
56
+ if (spec.transport !== "stdio") {
57
+ throw new Error(`Cannot set env auth on ${spec.transport} upstream.`);
58
+ }
59
+ const env = { ...(spec.env ?? {}) };
60
+ env[target.key] = secretRef;
61
+ spec.env = env;
62
+ }
63
+ export function removeAuthReference(spec, target) {
64
+ if (target.kind === "header") {
65
+ if (spec.transport !== "http") {
66
+ throw new Error(`Cannot remove header auth from ${spec.transport} upstream.`);
67
+ }
68
+ if (!spec.headers || !(target.key in spec.headers)) {
69
+ return null;
70
+ }
71
+ const previous = spec.headers[target.key] ?? null;
72
+ const next = { ...spec.headers };
73
+ delete next[target.key];
74
+ spec.headers = Object.keys(next).length > 0 ? next : undefined;
75
+ return previous;
76
+ }
77
+ if (spec.transport !== "stdio") {
78
+ throw new Error(`Cannot remove env auth from ${spec.transport} upstream.`);
79
+ }
80
+ if (!spec.env || !(target.key in spec.env)) {
81
+ return null;
82
+ }
83
+ const previous = spec.env[target.key] ?? null;
84
+ const next = { ...spec.env };
85
+ delete next[target.key];
86
+ spec.env = Object.keys(next).length > 0 ? next : undefined;
87
+ return previous;
88
+ }
89
+ export function listAuthBindings(spec) {
90
+ if (spec.transport === "http") {
91
+ return Object.entries(spec.headers ?? {}).map(([key, value]) => ({
92
+ kind: "header",
93
+ key,
94
+ value
95
+ }));
96
+ }
97
+ return Object.entries(spec.env ?? {}).map(([key, value]) => ({
98
+ kind: "env",
99
+ key,
100
+ value
101
+ }));
102
+ }
103
+ export function maybePrefixBearer(target, value, raw = false) {
104
+ if (raw || target.kind !== "header" || target.key.toLowerCase() !== "authorization") {
105
+ return value;
106
+ }
107
+ if (/^\S+\s+\S+/.test(value)) {
108
+ return value;
109
+ }
110
+ return `Bearer ${value}`;
111
+ }
112
+ //# sourceMappingURL=server-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-auth.js","sourceRoot":"","sources":["../../src/core/server-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ClientId, McpxConfig, SyncResult } from "../types.js";
2
+ import { SecretsManager } from "./secrets.js";
3
+ export interface SyncSummary {
4
+ gatewayUrl: string;
5
+ results: SyncResult[];
6
+ hasErrors: boolean;
7
+ }
8
+ export declare function getGatewayUrl(config: McpxConfig): string;
9
+ export declare function syncAllClients(config: McpxConfig, secrets: SecretsManager, targetClients?: ClientId[]): SyncSummary;
@@ -0,0 +1,63 @@
1
+ import { getAdapters } from "../adapters/index.js";
2
+ import { loadManagedIndex, saveManagedIndex } from "./managed-index.js";
3
+ import { getManagedIndexPath } from "./paths.js";
4
+ import { ensureGatewayToken } from "./registry.js";
5
+ import { saveConfig } from "./config.js";
6
+ export function getGatewayUrl(config) {
7
+ return `http://127.0.0.1:${config.gateway.port}/mcp`;
8
+ }
9
+ function buildManagedEntries(config, gatewayUrl, localToken) {
10
+ const names = Object.keys(config.servers);
11
+ return names.map((name) => ({
12
+ name,
13
+ url: `${gatewayUrl}?upstream=${encodeURIComponent(name)}`,
14
+ headers: {
15
+ "x-mcpx-local-token": localToken
16
+ }
17
+ }));
18
+ }
19
+ export function syncAllClients(config, secrets, targetClients) {
20
+ const adapters = getAdapters();
21
+ const managedIndexPath = getManagedIndexPath();
22
+ const managedIndex = loadManagedIndex(managedIndexPath);
23
+ const localToken = ensureGatewayToken(config, secrets);
24
+ const gatewayUrl = getGatewayUrl(config);
25
+ const managedEntries = buildManagedEntries(config, gatewayUrl, localToken);
26
+ const filteredAdapters = targetClients && targetClients.length > 0
27
+ ? adapters.filter((adapter) => targetClients.includes(adapter.id))
28
+ : adapters;
29
+ const results = [];
30
+ for (const adapter of filteredAdapters) {
31
+ if (!adapter.supportsHttp()) {
32
+ results.push({
33
+ clientId: adapter.id,
34
+ status: "UNSUPPORTED_HTTP",
35
+ message: "Client adapter does not support MCP over HTTP."
36
+ });
37
+ continue;
38
+ }
39
+ const result = adapter.syncGateway(config, {
40
+ managedEntries,
41
+ managedIndex,
42
+ managedIndexPath
43
+ });
44
+ results.push(result);
45
+ }
46
+ for (const result of results) {
47
+ config.clients[result.clientId] = {
48
+ status: result.status,
49
+ configPath: result.configPath,
50
+ message: result.message,
51
+ lastSyncAt: new Date().toISOString()
52
+ };
53
+ }
54
+ saveManagedIndex(managedIndex, managedIndexPath);
55
+ saveConfig(config);
56
+ const hasErrors = results.some((result) => result.status === "ERROR");
57
+ return {
58
+ gatewayUrl,
59
+ results,
60
+ hasErrors
61
+ };
62
+ }
63
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/core/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import http from "node:http";
2
+ import { SecretsManager } from "../core/secrets.js";
3
+ interface GatewayServerOptions {
4
+ port: number;
5
+ expectedToken: string;
6
+ secrets: SecretsManager;
7
+ }
8
+ export declare function createGatewayServer(options: GatewayServerOptions): http.Server;
9
+ export {};