@numa-tech/numa 1.16.0 → 1.17.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/README.md +22 -11
- package/dist/ai-registry/commands.js +41 -5
- package/dist/ai-registry/commands.js.map +1 -1
- package/dist/ai-registry/mcp-installer.d.ts +1 -0
- package/dist/ai-registry/mcp-installer.js +20 -1
- package/dist/ai-registry/mcp-installer.js.map +1 -1
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/command-catalog.js +14 -4
- package/dist/command-catalog.js.map +1 -1
- package/dist/interactive/mcp.js +13 -3
- package/dist/interactive/mcp.js.map +1 -1
- package/dist/mcp/commands.d.ts +2 -1
- package/dist/mcp/commands.js +21 -5
- package/dist/mcp/commands.js.map +1 -1
- package/dist/mcp/install.d.ts +1 -0
- package/dist/mcp/install.js +15 -9
- package/dist/mcp/install.js.map +1 -1
- package/dist/mcp-gateway/commands.d.ts +24 -0
- package/dist/mcp-gateway/commands.js +125 -0
- package/dist/mcp-gateway/commands.js.map +1 -0
- package/dist/mcp-gateway/install.d.ts +22 -0
- package/dist/mcp-gateway/install.js +36 -0
- package/dist/mcp-gateway/install.js.map +1 -0
- package/dist/mcp-gateway/profile.d.ts +61 -0
- package/dist/mcp-gateway/profile.js +155 -0
- package/dist/mcp-gateway/profile.js.map +1 -0
- package/dist/mcp-gateway/runtime.d.ts +141 -0
- package/dist/mcp-gateway/runtime.js +148 -0
- package/dist/mcp-gateway/runtime.js.map +1 -0
- package/package.json +4 -4
- package/skills/numa-cli/SKILL.md +1 -1
- package/skills/numa-cli/numa-skill.json +1 -1
- package/skills/numa-cli/references/cli-mcp.md +3 -3
package/dist/mcp/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/mcp/install.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/mcp/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import { type GatewayOptions } from "./profile.js";
|
|
3
|
+
import { type GatewayInstallOptions } from "./install.js";
|
|
4
|
+
type Options = GatewayOptions & Partial<GatewayInstallOptions> & {
|
|
5
|
+
json?: boolean;
|
|
6
|
+
arguments?: string;
|
|
7
|
+
file?: string;
|
|
8
|
+
timeout?: string;
|
|
9
|
+
dryRun?: boolean;
|
|
10
|
+
plan?: boolean;
|
|
11
|
+
env?: string[];
|
|
12
|
+
version?: string;
|
|
13
|
+
registry?: boolean;
|
|
14
|
+
catalog?: boolean;
|
|
15
|
+
noBrowser?: boolean;
|
|
16
|
+
search?: string;
|
|
17
|
+
page?: string;
|
|
18
|
+
limit?: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function addGatewayOptions(command: Command): Command;
|
|
21
|
+
export declare function registerGatewayCommands(mcp: Command): void;
|
|
22
|
+
export declare function useGatewayMode(options: Options): boolean;
|
|
23
|
+
export declare function executeGatewayCommand(action: "list" | "inspect" | "tools" | "install" | "bridge", name: string | undefined, options: Options, command: Command): Promise<void>;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
import { loadAppConfig } from "../app-config.js";
|
|
3
|
+
import { blockingBrowserLogin, ensureAccessToken } from "../oauth.js";
|
|
4
|
+
import { sanitizeRegistryOutput } from "../ai-registry/errors.js";
|
|
5
|
+
import { gatewayAuthConfig, gatewayError, gatewayProfiles, hasGatewayProfiles, resolveMcpGateway } from "./profile.js";
|
|
6
|
+
import { callGatewayTool, gatewayCatalog, listGatewayTools, runGatewayBridge, serviceEndpoint } from "./runtime.js";
|
|
7
|
+
import { gatewayInstallPlan, installGatewayPlan } from "./install.js";
|
|
8
|
+
export function addGatewayOptions(command) {
|
|
9
|
+
return command.option("--gateway <profile-service-key>", "选择 profile 中的 MCP 网关绑定")
|
|
10
|
+
.option("--credential-file <path>", "平台交付的本机机器凭据文件;缺省使用该网关的用户登录")
|
|
11
|
+
.option("--profile-id <id>", "校验安装时绑定的 profile 身份")
|
|
12
|
+
.option("--env-id <id>", "校验安装时绑定的环境")
|
|
13
|
+
.option("--gateway-id <id>", "校验安装时绑定的网关")
|
|
14
|
+
.option("--endpoint <url>", "校验安装时绑定的 MCP 地址");
|
|
15
|
+
}
|
|
16
|
+
function selection(command) {
|
|
17
|
+
return addGatewayOptions(command.option("-n, --namespace <key>", "业务 namespace")
|
|
18
|
+
.option("-i, --instance <code>", "Nacos 实例消歧").option("--workspace <path>", "项目根目录"));
|
|
19
|
+
}
|
|
20
|
+
async function output(command, value) {
|
|
21
|
+
const configuration = await loadAppConfig();
|
|
22
|
+
const json = command.optsWithGlobals().json || configuration.output === "json";
|
|
23
|
+
process.stdout.write(JSON.stringify(sanitizeRegistryOutput(value), null, json ? 2 : 2) + "\n");
|
|
24
|
+
}
|
|
25
|
+
function timeout(options) {
|
|
26
|
+
const seconds = options.timeout == null ? 60 : Number(options.timeout);
|
|
27
|
+
if (!Number.isFinite(seconds) || seconds < 1 || seconds > 600)
|
|
28
|
+
throw gatewayError("Timeout must be 1–600 seconds.", "mcp_gateway_input_invalid");
|
|
29
|
+
return seconds * 1000;
|
|
30
|
+
}
|
|
31
|
+
export function registerGatewayCommands(mcp) {
|
|
32
|
+
selection(mcp.command("gateways").description("查看 profile 配置的网关、issuer 与 Nacos namespace(不代表已授权)"))
|
|
33
|
+
.action(async (options, command) => {
|
|
34
|
+
const bindings = gatewayProfiles().filter(b => (!options.namespace || b.metadata.namespaceKey === options.namespace)
|
|
35
|
+
&& (!options.instance || b.metadata.instanceCode === options.instance) && (!options.gateway || b.serviceKey === options.gateway));
|
|
36
|
+
await output(command, { ok: true, gateways: bindings });
|
|
37
|
+
});
|
|
38
|
+
selection(mcp.command("login").description("登录所选 namespace 的业务 issuer,与平台管理登录分开"))
|
|
39
|
+
.option("--no-browser", "只显示登录链接")
|
|
40
|
+
.action(async (options, command) => {
|
|
41
|
+
const binding = await resolveMcpGateway(options), auth = await gatewayAuthConfig(binding, options);
|
|
42
|
+
if (auth.authenticationMode === "client_credentials")
|
|
43
|
+
await ensureAccessToken(auth);
|
|
44
|
+
else
|
|
45
|
+
await blockingBrowserLogin({ ...auth, openBrowser: options.browser !== false });
|
|
46
|
+
await output(command, { ok: true, namespace: binding.metadata.namespaceKey, gateway: binding.serviceKey, issuer: auth.issuerUrl, clientId: auth.clientId });
|
|
47
|
+
});
|
|
48
|
+
selection(mcp.command("call <name> <tool>").description("通过 namespace 网关调用工具(写工具会产生业务变更)"))
|
|
49
|
+
.option("--arguments <json>", "工具参数 JSON 对象")
|
|
50
|
+
.option("--file <path>", "从文件读取工具参数 JSON 对象")
|
|
51
|
+
.option("--timeout <seconds>", "调用总时限,1–600 秒", "60")
|
|
52
|
+
.action(async (name, tool, options, command) => {
|
|
53
|
+
if (options.arguments != null && options.file)
|
|
54
|
+
throw gatewayError("Use either --arguments or --file.", "mcp_gateway_input_invalid");
|
|
55
|
+
let raw = options.arguments ?? "{}";
|
|
56
|
+
if (options.file) {
|
|
57
|
+
if ((await stat(options.file)).size > 1024 * 1024)
|
|
58
|
+
throw gatewayError("Tool arguments exceed 1 MiB.");
|
|
59
|
+
raw = await readFile(options.file, "utf8");
|
|
60
|
+
}
|
|
61
|
+
let args;
|
|
62
|
+
try {
|
|
63
|
+
const value = JSON.parse(raw);
|
|
64
|
+
if (!value || typeof value !== "object" || Array.isArray(value) || Buffer.byteLength(raw) > 1024 * 1024)
|
|
65
|
+
throw new Error();
|
|
66
|
+
args = value;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
throw gatewayError("Tool arguments must be a JSON object no larger than 1 MiB.", "mcp_gateway_input_invalid");
|
|
70
|
+
}
|
|
71
|
+
const binding = await resolveMcpGateway(options), auth = await gatewayAuthConfig(binding, options);
|
|
72
|
+
const result = await callGatewayTool(binding, auth, name, tool, args, { timeoutMs: timeout(options) });
|
|
73
|
+
// Never print a known machine credential even if an upstream echoes it in content.
|
|
74
|
+
const safe = auth.clientSecret ? JSON.parse(JSON.stringify(result).split(auth.clientSecret).join("[REDACTED]")) : result;
|
|
75
|
+
await output(command, { ok: !result.isError, namespace: binding.metadata.namespaceKey, gateway: binding.serviceKey, result: safe });
|
|
76
|
+
if (result.isError)
|
|
77
|
+
process.exitCode = 1;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
export function useGatewayMode(options) {
|
|
81
|
+
return !options.registry && (hasGatewayProfiles() || Boolean(options.gateway || options.profileId || options.envId || options.gatewayId || options.endpoint || options.credentialFile || process.env.NUMA_MCP_CREDENTIAL_FILE));
|
|
82
|
+
}
|
|
83
|
+
export async function executeGatewayCommand(action, name, options, command) {
|
|
84
|
+
if (options.version)
|
|
85
|
+
throw gatewayError("Gateway MCP follows the active platform publication; exact version pinning is not supported. Use --registry to inspect registry versions.");
|
|
86
|
+
const binding = await resolveMcpGateway(options), auth = await gatewayAuthConfig(binding, options);
|
|
87
|
+
if (options.endpoint && (!name || serviceEndpoint(binding, name) !== options.endpoint))
|
|
88
|
+
throw gatewayError("Installed MCP endpoint changed; reinstall after review.");
|
|
89
|
+
if (action === "bridge") {
|
|
90
|
+
if (options.catalog && name)
|
|
91
|
+
throw gatewayError("Choose a service or --catalog, not both.");
|
|
92
|
+
if (!name && !options.catalog)
|
|
93
|
+
throw gatewayError("Specify the MCP service name or --catalog for the directory.");
|
|
94
|
+
await runGatewayBridge(binding, auth, options.catalog ? "@catalog" : name);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (action === "install") {
|
|
98
|
+
if (!name || !options.agent)
|
|
99
|
+
throw gatewayError("Choose an MCP service and Agent.");
|
|
100
|
+
if (options.env?.length)
|
|
101
|
+
throw gatewayError("Gateway installation does not accept --env; credentials come from the bound profile or credential file.");
|
|
102
|
+
const plan = gatewayInstallPlan(binding, name, options);
|
|
103
|
+
const tools = await listGatewayTools(binding, auth, name, { timeoutMs: timeout(options) });
|
|
104
|
+
if (options.dryRun || options.plan) {
|
|
105
|
+
await output(command, { ok: true, dryRun: true, plan, visibleTools: tools.tools.map(t => t.name) });
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const installation = await installGatewayPlan(plan);
|
|
109
|
+
await output(command, { ok: true, namespace: binding.metadata.namespaceKey, gateway: binding.serviceKey, installation, activePublication: true });
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
let result = action === "tools" ? await listGatewayTools(binding, auth, name, { timeoutMs: timeout(options) })
|
|
113
|
+
: await gatewayCatalog(binding, auth, action === "inspect" ? name : undefined, { timeoutMs: timeout(options) });
|
|
114
|
+
if (action === "list") {
|
|
115
|
+
const page = Number(options.page ?? 1), limit = Number(options.limit ?? 20);
|
|
116
|
+
if (!Number.isSafeInteger(page) || page < 1 || page > 1_000_000 || !Number.isSafeInteger(limit) || limit < 1 || limit > 100) {
|
|
117
|
+
throw gatewayError("Page must be 1–1000000 and limit 1–100.", "mcp_gateway_input_invalid");
|
|
118
|
+
}
|
|
119
|
+
const query = options.search?.trim().toLowerCase();
|
|
120
|
+
const rows = result.services.filter(row => !query || [row.serviceId, row.displayName, row.description].some(value => typeof value === "string" && value.toLowerCase().includes(query)));
|
|
121
|
+
result = { ...result, services: rows.slice((page - 1) * limit, page * limit), total: rows.length, page, limit };
|
|
122
|
+
}
|
|
123
|
+
await output(command, { ok: true, namespace: binding.metadata.namespaceKey, gateway: binding.serviceKey, result });
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/mcp-gateway/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type McpInstallOptions, type McpInstallerDependencies } from "../ai-registry/mcp-installer.js";
|
|
2
|
+
import { type GatewayBinding, type GatewayOptions } from "./profile.js";
|
|
3
|
+
export interface GatewayInstallOptions extends GatewayOptions {
|
|
4
|
+
agent: string;
|
|
5
|
+
scope?: string;
|
|
6
|
+
transport?: string;
|
|
7
|
+
customConfig?: string;
|
|
8
|
+
force?: boolean;
|
|
9
|
+
name?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function gatewayInstallPlan(binding: GatewayBinding, service: string, options: GatewayInstallOptions): {
|
|
12
|
+
name: string;
|
|
13
|
+
endpoint: string;
|
|
14
|
+
profileRevision: number;
|
|
15
|
+
definition: {
|
|
16
|
+
command: string;
|
|
17
|
+
args: string[];
|
|
18
|
+
env: Record<string, string>;
|
|
19
|
+
};
|
|
20
|
+
options: McpInstallOptions;
|
|
21
|
+
};
|
|
22
|
+
export declare function installGatewayPlan(plan: ReturnType<typeof gatewayInstallPlan>, dependencies?: McpInstallerDependencies): Promise<import("../ai-registry/mcp-installer.js").McpInstallResult>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { installMcpClientDefinition } from "../ai-registry/mcp-installer.js";
|
|
3
|
+
import { gatewayError } from "./profile.js";
|
|
4
|
+
import { serviceEndpoint } from "./runtime.js";
|
|
5
|
+
export function gatewayInstallPlan(binding, service, options) {
|
|
6
|
+
serviceEndpoint(binding, service);
|
|
7
|
+
if (binding.metadata.publishedEndpoints?.find(e => e.serviceId === service)?.transport === "sse")
|
|
8
|
+
throw gatewayError("Direct SSE providers require a Streamable HTTP Router endpoint before installation.");
|
|
9
|
+
const agent = options.agent;
|
|
10
|
+
if (!["chatgpt", "codex", "claude", "cursor", "workbuddy", "openclaw", "custom"].includes(agent))
|
|
11
|
+
throw gatewayError("Unsupported Agent adapter.");
|
|
12
|
+
if (agent === "chatgpt" || options.transport === "remote")
|
|
13
|
+
throw gatewayError("This gateway profile uses a stdio authentication bridge. Remote OAuth installation is not available for this MCP gateway.", "mcp_gateway_remote_oauth_unavailable");
|
|
14
|
+
if (options.transport && !["auto", "bridge"].includes(options.transport))
|
|
15
|
+
throw gatewayError("Transport must be auto or bridge.");
|
|
16
|
+
const scope = options.scope ?? (["codex", "openclaw"].includes(agent) ? "user" : "project");
|
|
17
|
+
if (scope !== "user" && scope !== "project")
|
|
18
|
+
throw gatewayError("Scope must be project or user.");
|
|
19
|
+
if (["codex", "openclaw"].includes(agent) && scope !== "user")
|
|
20
|
+
throw gatewayError(`${agent} MCP registration requires user scope.`);
|
|
21
|
+
const name = options.name ?? `${binding.metadata.namespaceKey}-${service}`;
|
|
22
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$/u.test(name))
|
|
23
|
+
throw gatewayError("Choose a valid Agent registration alias with --name (maximum 120 characters).");
|
|
24
|
+
const env = { NUMA_PROFILE_URL: binding.profileUrl };
|
|
25
|
+
const credentialFile = options.credentialFile || process.env.NUMA_MCP_CREDENTIAL_FILE;
|
|
26
|
+
if (credentialFile)
|
|
27
|
+
env.NUMA_MCP_CREDENTIAL_FILE = resolve(credentialFile);
|
|
28
|
+
return { name, endpoint: serviceEndpoint(binding, service), profileRevision: binding.profileRevision,
|
|
29
|
+
definition: { command: "numa", args: ["mcp", "bridge", service, "--namespace", binding.metadata.namespaceKey,
|
|
30
|
+
"--instance", binding.metadata.instanceCode, "--gateway", binding.serviceKey, "--profile-id", binding.profileId, "--env-id", binding.metadata.envId, "--gateway-id", binding.metadata.gatewayId, "--endpoint", serviceEndpoint(binding, service)], env },
|
|
31
|
+
options: { agent, scope, workspace: options.workspace, customConfig: options.customConfig, force: options.force } };
|
|
32
|
+
}
|
|
33
|
+
export async function installGatewayPlan(plan, dependencies = {}) {
|
|
34
|
+
return installMcpClientDefinition(plan.name, plan.definition, plan.options, dependencies);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/mcp-gateway/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type AuthConfig } from "../config.js";
|
|
3
|
+
import { type ResolvedPlatformProfile } from "../platform-profile.js";
|
|
4
|
+
import { AiRegistryError } from "../ai-registry/errors.js";
|
|
5
|
+
declare const Metadata: z.ZodObject<{
|
|
6
|
+
namespaceKey: z.ZodString;
|
|
7
|
+
instanceCode: z.ZodString;
|
|
8
|
+
nacosNamespaceId: z.ZodString;
|
|
9
|
+
envId: z.ZodString;
|
|
10
|
+
clusterId: z.ZodString;
|
|
11
|
+
gatewayId: z.ZodString;
|
|
12
|
+
default: z.ZodOptional<z.ZodBoolean>;
|
|
13
|
+
publishedEndpoints: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
14
|
+
serviceId: z.ZodString;
|
|
15
|
+
url: z.ZodString;
|
|
16
|
+
transport: z.ZodEnum<{
|
|
17
|
+
sse: "sse";
|
|
18
|
+
"streamable-http": "streamable-http";
|
|
19
|
+
}>;
|
|
20
|
+
applicationId: z.ZodString;
|
|
21
|
+
gatewayBindingId: z.ZodString;
|
|
22
|
+
bindingVersion: z.ZodNumber;
|
|
23
|
+
roleClientId: z.ZodString;
|
|
24
|
+
}, z.core.$strict>>>;
|
|
25
|
+
}, z.core.$strict>;
|
|
26
|
+
export interface GatewayOptions {
|
|
27
|
+
namespace?: string;
|
|
28
|
+
instance?: string;
|
|
29
|
+
gateway?: string;
|
|
30
|
+
workspace?: string;
|
|
31
|
+
credentialFile?: string;
|
|
32
|
+
profileId?: string;
|
|
33
|
+
endpoint?: string;
|
|
34
|
+
envId?: string;
|
|
35
|
+
gatewayId?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface GatewayBinding {
|
|
38
|
+
serviceKey: string;
|
|
39
|
+
profileId: string;
|
|
40
|
+
profileUrl: string;
|
|
41
|
+
profileRevision: number;
|
|
42
|
+
tenantId: string;
|
|
43
|
+
baseUrl: string;
|
|
44
|
+
resource: string;
|
|
45
|
+
audience: string;
|
|
46
|
+
roleClientId: string;
|
|
47
|
+
authority: {
|
|
48
|
+
issuer: string;
|
|
49
|
+
discoveryUrl: string;
|
|
50
|
+
clientId: string;
|
|
51
|
+
scopes: string[];
|
|
52
|
+
};
|
|
53
|
+
metadata: z.infer<typeof Metadata>;
|
|
54
|
+
}
|
|
55
|
+
export declare function gatewayError(message: string, code?: string): AiRegistryError;
|
|
56
|
+
export declare function hasGatewayProfiles(): boolean;
|
|
57
|
+
export declare function publicUrl(value: string): URL;
|
|
58
|
+
export declare function gatewayProfiles(profile?: ResolvedPlatformProfile | undefined): GatewayBinding[];
|
|
59
|
+
export declare function resolveMcpGateway(options: GatewayOptions): Promise<GatewayBinding>;
|
|
60
|
+
export declare function gatewayAuthConfig(binding: GatewayBinding, options: GatewayOptions): Promise<AuthConfig>;
|
|
61
|
+
export {};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { lstat, readFile } from "node:fs/promises";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { appConfigDirectory, loadAppConfig } from "../app-config.js";
|
|
6
|
+
import { DEFAULT_REDIRECT_HOST, DEFAULT_REDIRECT_PORT } from "../config.js";
|
|
7
|
+
import { currentPlatformProfile } from "../platform-profile.js";
|
|
8
|
+
import { readRegistryManifest } from "../ai-registry/workspace.js";
|
|
9
|
+
import { AiRegistryError } from "../ai-registry/errors.js";
|
|
10
|
+
const Identifier = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,159}$/u);
|
|
11
|
+
const PublishedEndpoint = z.object({
|
|
12
|
+
serviceId: z.string().regex(/^[a-z0-9][a-z0-9-]{0,62}$/u), url: z.string(),
|
|
13
|
+
transport: z.enum(["streamable-http", "sse"]), applicationId: Identifier, gatewayBindingId: Identifier,
|
|
14
|
+
bindingVersion: z.number().int().positive(), roleClientId: Identifier
|
|
15
|
+
}).strict();
|
|
16
|
+
const Metadata = z.object({
|
|
17
|
+
namespaceKey: Identifier, instanceCode: Identifier, nacosNamespaceId: Identifier,
|
|
18
|
+
envId: Identifier, clusterId: Identifier, gatewayId: Identifier, default: z.boolean().optional(), publishedEndpoints: z.array(PublishedEndpoint).max(256).optional()
|
|
19
|
+
}).strict();
|
|
20
|
+
export function gatewayError(message, code = "mcp_gateway_invalid") {
|
|
21
|
+
return new AiRegistryError(message, code);
|
|
22
|
+
}
|
|
23
|
+
export function hasGatewayProfiles() {
|
|
24
|
+
return Object.values(currentPlatformProfile()?.services ?? {}).some(service => {
|
|
25
|
+
const configuration = service.configuration;
|
|
26
|
+
return configuration && Object.hasOwn(configuration, "mcpGateway");
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export function publicUrl(value) {
|
|
30
|
+
try {
|
|
31
|
+
const url = new URL(value);
|
|
32
|
+
const local = ["localhost", "127.0.0.1", "::1", "[::1]"].includes(url.hostname) || url.hostname.endsWith(".localhost");
|
|
33
|
+
if (url.username || url.password || url.search || url.hash || (url.protocol !== "https:" && !(url.protocol === "http:" && local)))
|
|
34
|
+
throw new Error();
|
|
35
|
+
return url;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
throw gatewayError("MCP gateway metadata requires HTTPS URLs without credentials, query or fragment (loopback development excepted).");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function gatewayProfiles(profile = currentPlatformProfile()) {
|
|
42
|
+
if (!profile)
|
|
43
|
+
throw gatewayError("A platform config profile is required for MCP gateways.", "mcp_gateway_profile_required");
|
|
44
|
+
if (profile.stale)
|
|
45
|
+
throw gatewayError("The platform profile is stale; refresh it before gateway invocation or installation.", "mcp_gateway_profile_stale");
|
|
46
|
+
const result = [];
|
|
47
|
+
for (const [serviceKey, raw] of Object.entries(profile.services)) {
|
|
48
|
+
const service = raw;
|
|
49
|
+
if (!service.configuration || !Object.hasOwn(service.configuration, "mcpGateway"))
|
|
50
|
+
continue;
|
|
51
|
+
const metadata = Metadata.safeParse(service.configuration.mcpGateway);
|
|
52
|
+
if (!metadata.success)
|
|
53
|
+
throw gatewayError("Invalid MCP gateway namespace metadata in platform profile.");
|
|
54
|
+
const authority = profile.authorities[service.authority];
|
|
55
|
+
if (!authority || !authority.clientId || !authority.scopes.includes("openid"))
|
|
56
|
+
throw gatewayError("MCP gateway has no valid authority.");
|
|
57
|
+
const base = publicUrl(service.baseUrl).toString().replace(/\/+$/u, "");
|
|
58
|
+
if (!base.endsWith("/mcp-gw") || !service.audience || !service.roleClientId)
|
|
59
|
+
throw gatewayError("MCP gateway baseUrl must identify the /mcp-gw application and its audience.");
|
|
60
|
+
publicUrl(service.resource);
|
|
61
|
+
const seenEndpoints = new Set();
|
|
62
|
+
for (const endpoint of metadata.data.publishedEndpoints ?? []) {
|
|
63
|
+
const u = publicUrl(endpoint.url), b = new URL(base);
|
|
64
|
+
const gatewayPrefix = b.pathname.slice(0, -"/mcp-gw".length);
|
|
65
|
+
if (u.toString() !== endpoint.url || u.origin !== b.origin || !u.pathname.startsWith(gatewayPrefix + "/") || /[%\\]/u.test(endpoint.url) || seenEndpoints.has(endpoint.serviceId))
|
|
66
|
+
throw gatewayError("Invalid or duplicate published MCP endpoint in selected gateway.");
|
|
67
|
+
seenEndpoints.add(endpoint.serviceId);
|
|
68
|
+
}
|
|
69
|
+
const issuer = publicUrl(authority.issuer).toString().replace(/\/+$/u, "");
|
|
70
|
+
if (publicUrl(authority.discoveryUrl).toString() !== `${issuer}/.well-known/openid-configuration`)
|
|
71
|
+
throw gatewayError("MCP gateway discovery must belong to its issuer.");
|
|
72
|
+
result.push({ serviceKey, profileId: profile.profileId, profileUrl: profile.sourceUrl, profileRevision: profile.revision,
|
|
73
|
+
tenantId: profile.tenant.id, baseUrl: base, resource: service.resource, audience: service.audience,
|
|
74
|
+
roleClientId: service.roleClientId, authority: { ...authority, issuer }, metadata: metadata.data });
|
|
75
|
+
}
|
|
76
|
+
const environments = new Map();
|
|
77
|
+
const defaults = new Set();
|
|
78
|
+
for (const binding of result) {
|
|
79
|
+
const m = binding.metadata;
|
|
80
|
+
const signature = JSON.stringify([m.clusterId, m.namespaceKey, m.instanceCode, m.nacosNamespaceId, binding.authority.issuer]);
|
|
81
|
+
if (environments.has(m.envId) && environments.get(m.envId) !== signature)
|
|
82
|
+
throw gatewayError("MCP gateways disagree on the environment namespace or issuer.");
|
|
83
|
+
environments.set(m.envId, signature);
|
|
84
|
+
if (m.default) {
|
|
85
|
+
const key = `${m.namespaceKey}\0${m.instanceCode}`;
|
|
86
|
+
if (defaults.has(key))
|
|
87
|
+
throw gatewayError("Multiple default MCP gateways are configured for one namespace instance.");
|
|
88
|
+
defaults.add(key);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
export async function resolveMcpGateway(options) {
|
|
94
|
+
const bindings = gatewayProfiles();
|
|
95
|
+
const profile = currentPlatformProfile();
|
|
96
|
+
if (options.profileId && options.profileId !== profile.profileId)
|
|
97
|
+
throw gatewayError("Installed MCP profile identity changed; reinstall after reviewing the new profile.");
|
|
98
|
+
const explicit = options.namespace?.trim();
|
|
99
|
+
const project = explicit ? undefined : await readRegistryManifest(options.workspace, false);
|
|
100
|
+
const user = await loadAppConfig();
|
|
101
|
+
const profileDefault = profile.services.aiRegistry?.configuration?.defaultNamespaceKey;
|
|
102
|
+
const namespace = explicit || project?.manifest.namespaceKey || user.aiRegistryDefaultNamespaceKey || profileDefault;
|
|
103
|
+
if (!namespace)
|
|
104
|
+
throw gatewayError("Select a namespace with --namespace, project manifest, user default or profile default.", "mcp_gateway_namespace_required");
|
|
105
|
+
const instance = options.instance || (!explicit ? project?.manifest.instanceCode : undefined);
|
|
106
|
+
let candidates = bindings.filter(b => b.metadata.namespaceKey === namespace && (!instance || b.metadata.instanceCode === instance)
|
|
107
|
+
&& (!options.gateway || b.serviceKey === options.gateway));
|
|
108
|
+
if (!candidates.length)
|
|
109
|
+
throw gatewayError("The requested namespace/gateway is not configured in this platform profile.", "mcp_gateway_not_configured");
|
|
110
|
+
if (new Set(candidates.map(b => b.metadata.instanceCode)).size > 1)
|
|
111
|
+
throw gatewayError("Namespace is ambiguous; select --instance.", "mcp_gateway_ambiguous");
|
|
112
|
+
if (candidates.length > 1) {
|
|
113
|
+
const defaults = candidates.filter(b => b.metadata.default);
|
|
114
|
+
if (defaults.length === 1)
|
|
115
|
+
candidates = defaults;
|
|
116
|
+
}
|
|
117
|
+
if (candidates.length !== 1)
|
|
118
|
+
throw gatewayError("Namespace gateway is ambiguous; select --gateway <profile-service-key>.", "mcp_gateway_ambiguous");
|
|
119
|
+
const selected = candidates[0];
|
|
120
|
+
if ((options.envId && selected.metadata.envId !== options.envId) || (options.gatewayId && selected.metadata.gatewayId !== options.gatewayId))
|
|
121
|
+
throw gatewayError("Installed MCP environment or gateway identity changed; reinstall after review.");
|
|
122
|
+
return selected;
|
|
123
|
+
}
|
|
124
|
+
export async function gatewayAuthConfig(binding, options) {
|
|
125
|
+
let clientId = binding.authority.clientId;
|
|
126
|
+
let clientSecret;
|
|
127
|
+
const file = options.credentialFile || process.env.NUMA_MCP_CREDENTIAL_FILE;
|
|
128
|
+
if (file) {
|
|
129
|
+
try {
|
|
130
|
+
const info = await lstat(resolve(file));
|
|
131
|
+
if (!info.isFile() || info.isSymbolicLink() || info.size > 65536 || (process.platform !== "win32" && (info.mode & 0o077)))
|
|
132
|
+
throw new Error();
|
|
133
|
+
const value = JSON.parse(await readFile(resolve(file), "utf8"));
|
|
134
|
+
if (value.issuer !== binding.authority.issuer)
|
|
135
|
+
throw gatewayError("Machine credential issuer does not match the selected gateway.");
|
|
136
|
+
if (typeof value.client_id !== "string" || !value.client_id || typeof value.client_secret !== "string" || !value.client_secret)
|
|
137
|
+
throw new Error();
|
|
138
|
+
clientId = value.client_id;
|
|
139
|
+
clientSecret = value.client_secret;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
if (error instanceof AiRegistryError)
|
|
143
|
+
throw error;
|
|
144
|
+
throw gatewayError("Cannot load the private MCP machine credential file; use a regular 0600 platform-delivered file.", "mcp_gateway_credential_invalid");
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const key = createHash("sha256").update(JSON.stringify([binding.profileId, binding.tenantId, binding.authority.issuer, clientId, binding.audience])).digest("hex").slice(0, 24);
|
|
148
|
+
return { authenticationMode: clientSecret ? "client_credentials" : "browser", discoveryUrl: binding.authority.discoveryUrl,
|
|
149
|
+
issuerUrl: binding.authority.issuer, clientId, clientSecret, resourceAudience: binding.audience,
|
|
150
|
+
profileTenantId: binding.tenantId, scope: clientSecret ? "openid" : binding.authority.scopes.join(" "),
|
|
151
|
+
tokenFile: join(appConfigDirectory(), `mcp-token-${key}.json`), redirectHost: DEFAULT_REDIRECT_HOST,
|
|
152
|
+
redirectPort: DEFAULT_REDIRECT_PORT, redirectPath: "/callback", openBrowser: process.env.NUMA_AUTH_OPEN_BROWSER !== "false",
|
|
153
|
+
backendBaseUrl: binding.baseUrl, allowAbsoluteBackendUrls: false };
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/mcp-gateway/profile.ts"],"names":[],"mappings":"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"}
|