@guardbee/mcp-security-proxy 0.3.1 → 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 (76) hide show
  1. package/README.md +98 -19
  2. package/TR.md +98 -19
  3. package/dist/audit/logger.d.ts +14 -2
  4. package/dist/audit/logger.d.ts.map +1 -1
  5. package/dist/audit/logger.js +72 -1
  6. package/dist/audit/logger.js.map +1 -1
  7. package/dist/cli.d.ts +1 -0
  8. package/dist/cli.js +65 -3
  9. package/dist/cli.js.map +1 -1
  10. package/dist/gateway/approval.d.ts +16 -0
  11. package/dist/gateway/approval.d.ts.map +1 -0
  12. package/dist/gateway/approval.js +36 -0
  13. package/dist/gateway/approval.js.map +1 -0
  14. package/dist/gateway/config.d.ts +36 -0
  15. package/dist/gateway/config.d.ts.map +1 -0
  16. package/dist/gateway/config.js +206 -0
  17. package/dist/gateway/config.js.map +1 -0
  18. package/dist/gateway/fields.d.ts +7 -0
  19. package/dist/gateway/fields.d.ts.map +1 -0
  20. package/dist/gateway/fields.js +43 -0
  21. package/dist/gateway/fields.js.map +1 -0
  22. package/dist/gateway/gateway.d.ts +59 -0
  23. package/dist/gateway/gateway.d.ts.map +1 -0
  24. package/dist/gateway/gateway.js +376 -0
  25. package/dist/gateway/gateway.js.map +1 -0
  26. package/dist/gateway/labels.d.ts +10 -0
  27. package/dist/gateway/labels.d.ts.map +1 -0
  28. package/dist/gateway/labels.js +17 -0
  29. package/dist/gateway/labels.js.map +1 -0
  30. package/dist/gateway/policy.d.ts +37 -0
  31. package/dist/gateway/policy.d.ts.map +1 -0
  32. package/dist/gateway/policy.js +57 -0
  33. package/dist/gateway/policy.js.map +1 -0
  34. package/dist/gateway/taint.d.ts +25 -0
  35. package/dist/gateway/taint.d.ts.map +1 -0
  36. package/dist/gateway/taint.js +43 -0
  37. package/dist/gateway/taint.js.map +1 -0
  38. package/dist/gateway/tokens.d.ts +18 -0
  39. package/dist/gateway/tokens.d.ts.map +1 -0
  40. package/dist/gateway/tokens.js +60 -0
  41. package/dist/gateway/tokens.js.map +1 -0
  42. package/dist/gateway/upstream.d.ts +20 -0
  43. package/dist/gateway/upstream.d.ts.map +1 -0
  44. package/dist/gateway/upstream.js +49 -0
  45. package/dist/gateway/upstream.js.map +1 -0
  46. package/dist/index.d.ts +21 -3
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +32 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/init.d.ts +34 -0
  51. package/dist/init.d.ts.map +1 -0
  52. package/dist/init.js +140 -0
  53. package/dist/init.js.map +1 -0
  54. package/dist/interceptors/definition-drift.d.ts +1 -0
  55. package/dist/interceptors/definition-drift.d.ts.map +1 -1
  56. package/dist/interceptors/definition-drift.js +1 -0
  57. package/dist/interceptors/definition-drift.js.map +1 -1
  58. package/dist/interceptors/pii-masker.d.ts +1 -2
  59. package/dist/interceptors/pii-masker.d.ts.map +1 -1
  60. package/dist/interceptors/pii-masker.js +5 -68
  61. package/dist/interceptors/pii-masker.js.map +1 -1
  62. package/dist/interceptors/prompt-injection.d.ts +1 -2
  63. package/dist/interceptors/prompt-injection.d.ts.map +1 -1
  64. package/dist/interceptors/prompt-injection.js +4 -40
  65. package/dist/interceptors/prompt-injection.js.map +1 -1
  66. package/dist/interceptors/tool-result.d.ts +1 -3
  67. package/dist/interceptors/tool-result.d.ts.map +1 -1
  68. package/dist/interceptors/tool-result.js +4 -12
  69. package/dist/interceptors/tool-result.js.map +1 -1
  70. package/dist/proxy.d.ts +18 -0
  71. package/dist/proxy.d.ts.map +1 -1
  72. package/dist/proxy.js +48 -226
  73. package/dist/proxy.js.map +1 -1
  74. package/dist/types.d.ts +36 -6
  75. package/dist/types.d.ts.map +1 -1
  76. package/package.json +4 -2
@@ -0,0 +1,36 @@
1
+ import type { AuditConfig, McpServerConfig, ProxyConfig } from "../types.js";
2
+ import { type Label } from "./labels.js";
3
+ import type { PolicyAction, PolicyRule } from "./policy.js";
4
+ import type { TaintMode } from "./taint.js";
5
+ export interface GatewayConfig {
6
+ upstreams: Record<string, McpServerConfig>;
7
+ /** Prefix tool and prompt names with `<upstream>__`. Off only for the legacy single-server config. */
8
+ namespaced: boolean;
9
+ /** Label overrides by the tool name the agent sees; replaces the heuristic labels entirely. */
10
+ labels: Record<string, Label[]>;
11
+ rules: PolicyRule[];
12
+ taint: {
13
+ mode: TaintMode;
14
+ };
15
+ /** How long an `approve` decision waits for the person before it becomes a deny. */
16
+ approval: {
17
+ timeoutSeconds: number;
18
+ };
19
+ defaults: {
20
+ action: PolicyAction;
21
+ };
22
+ audit: AuditConfig;
23
+ interceptors: NonNullable<ProxyConfig["interceptors"]>;
24
+ }
25
+ export declare function parseGatewayYaml(source: string, fileLabel?: string): GatewayConfig;
26
+ /**
27
+ * The 0.x single-server config keeps its behavior: tool names are not prefixed,
28
+ * payloads are logged, and a toxic flow only warns.
29
+ */
30
+ export declare function fromLegacyConfig(config: ProxyConfig): GatewayConfig;
31
+ /**
32
+ * 1. `--config <file.yaml>` 2. GUARDBEE_PROXY_CONFIG pointing at a .yaml/.yml
33
+ * 3. ./guardbee-proxy.yaml (or .yml) 4. the legacy JSON / `-- <command>` / PROXY_* setup.
34
+ */
35
+ export declare function loadGatewayConfig(argv?: string[], cwd?: string): GatewayConfig;
36
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/gateway/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAU,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC3C,sGAAsG;IACtG,UAAU,EAAE,OAAO,CAAC;IACpB,+FAA+F;IAC/F,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAChC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IAC3B,oFAAoF;IACpF,QAAQ,EAAE;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,QAAQ,EAAE;QAAE,MAAM,EAAE,YAAY,CAAA;KAAE,CAAC;IACnC,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,EAAE,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;CACxD;AAyHD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,SAAwB,GAAG,aAAa,CAuBjG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CAYnE;AAgBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,MAAM,EAAiB,EAAE,GAAG,GAAE,MAAsB,GAAG,aAAa,CAmB3G"}
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseGatewayYaml = parseGatewayYaml;
7
+ exports.fromLegacyConfig = fromLegacyConfig;
8
+ exports.loadGatewayConfig = loadGatewayConfig;
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const yaml_1 = require("yaml");
12
+ const zod_1 = require("zod");
13
+ const config_js_1 = require("../config.js");
14
+ const labels_js_1 = require("./labels.js");
15
+ const labelSchema = zod_1.z.enum(labels_js_1.LABELS);
16
+ const actionSchema = zod_1.z.enum(["allow", "deny", "mask", "warn", "approve"]);
17
+ const interceptorSchema = zod_1.z.object({ enabled: zod_1.z.boolean(), action: zod_1.z.enum(["block", "warn"]) }).strict();
18
+ const upstreamSchema = zod_1.z
19
+ .object({
20
+ command: zod_1.z.string().min(1).optional(),
21
+ args: zod_1.z.array(zod_1.z.string()).optional(),
22
+ env: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),
23
+ url: zod_1.z.string().optional(),
24
+ })
25
+ .strict()
26
+ .superRefine((value, ctx) => {
27
+ if (value.url !== undefined) {
28
+ ctx.addIssue({ code: "custom", message: "HTTP upstreams (url) are not supported yet; run the server with command/args" });
29
+ }
30
+ else if (value.command === undefined) {
31
+ ctx.addIssue({ code: "custom", message: "an upstream needs a command" });
32
+ }
33
+ });
34
+ const yamlSchema = zod_1.z
35
+ .object({
36
+ version: zod_1.z.literal(1),
37
+ upstreams: zod_1.z.record(zod_1.z.string(), upstreamSchema).superRefine((upstreams, ctx) => {
38
+ const names = Object.keys(upstreams);
39
+ if (names.length === 0)
40
+ ctx.addIssue({ code: "custom", message: "at least one upstream is required" });
41
+ for (const name of names) {
42
+ // Checked here, not as the record's key schema: zod replaces a key schema's message with "Invalid key in record".
43
+ if (!/^[A-Za-z0-9-]+(?:_[A-Za-z0-9-]+)*$/.test(name)) {
44
+ ctx.addIssue({
45
+ code: "custom",
46
+ path: [name],
47
+ message: "upstream names use letters, digits, - and single _ (a double __ is the namespace separator)",
48
+ });
49
+ }
50
+ }
51
+ }),
52
+ labels: zod_1.z.record(zod_1.z.string(), zod_1.z.array(labelSchema)).default({}),
53
+ rules: zod_1.z
54
+ .array(zod_1.z
55
+ .object({
56
+ id: zod_1.z.string().optional(),
57
+ match: zod_1.z
58
+ .object({
59
+ tool: zod_1.z.string().optional(),
60
+ upstream: zod_1.z.string().optional(),
61
+ label: labelSchema.optional(),
62
+ session: zod_1.z.enum(["clean", "tainted"]).optional(),
63
+ args: zod_1.z.record(zod_1.z.string(), zod_1.z.union([zod_1.z.string(), zod_1.z.number(), zod_1.z.boolean()])).optional(),
64
+ })
65
+ .strict(),
66
+ action: actionSchema,
67
+ mask: zod_1.z.object({ fields: zod_1.z.array(zod_1.z.string()).min(1) }).strict().optional(),
68
+ })
69
+ .strict()
70
+ .refine((rule) => rule.mask === undefined || rule.action === "mask", {
71
+ message: "mask.fields only applies to action: mask",
72
+ path: ["mask"],
73
+ }))
74
+ .default([]),
75
+ taint: zod_1.z.object({ mode: zod_1.z.enum(["strict", "approve", "warn", "off"]).default("strict") }).strict().default({ mode: "strict" }),
76
+ approval: zod_1.z
77
+ .object({ timeoutSeconds: zod_1.z.number().int().positive().default(120) })
78
+ .strict()
79
+ .default({ timeoutSeconds: 120 }),
80
+ defaults: zod_1.z.object({ action: actionSchema.default("allow") }).strict().default({ action: "allow" }),
81
+ audit: zod_1.z
82
+ .object({
83
+ enabled: zod_1.z.boolean().default(true),
84
+ sink: zod_1.z.enum(["console", "file"]).default("console"),
85
+ filePath: zod_1.z.string().optional(),
86
+ includePayloads: zod_1.z.boolean().default(false),
87
+ })
88
+ .strict()
89
+ .default({ enabled: true, sink: "console", includePayloads: false }),
90
+ interceptors: zod_1.z
91
+ .object({
92
+ promptInjection: interceptorSchema.optional(),
93
+ toolResultInjection: interceptorSchema.optional(),
94
+ definitionDrift: interceptorSchema
95
+ .extend({ recheck: zod_1.z.enum(["every-call", "on-change"]).optional() })
96
+ .optional(),
97
+ piiMasking: zod_1.z
98
+ .object({
99
+ enabled: zod_1.z.boolean(),
100
+ patterns: zod_1.z.array(zod_1.z.string()).optional(),
101
+ mode: zod_1.z.enum(["redact", "tokenize"]).optional(),
102
+ detokenizeForEgress: zod_1.z.boolean().optional(),
103
+ })
104
+ .strict()
105
+ .optional(),
106
+ })
107
+ .strict()
108
+ .default({}),
109
+ })
110
+ .strict();
111
+ /** Replace `${VAR}` with the environment value; config files never hold the secret itself. */
112
+ function interpolate(value, where) {
113
+ return value.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (_, name) => {
114
+ const resolved = process.env[name];
115
+ if (resolved === undefined)
116
+ throw new Error(`Environment variable ${name} (used in ${where}) is not set`);
117
+ return resolved;
118
+ });
119
+ }
120
+ function interpolateUpstream(name, upstream) {
121
+ const where = `upstreams.${name}`;
122
+ return {
123
+ command: interpolate(upstream.command, where),
124
+ args: upstream.args?.map((arg) => interpolate(arg, where)),
125
+ env: upstream.env
126
+ ? Object.fromEntries(Object.entries(upstream.env).map(([k, v]) => [k, interpolate(v, where)]))
127
+ : undefined,
128
+ };
129
+ }
130
+ function parseGatewayYaml(source, fileLabel = "guardbee-proxy.yaml") {
131
+ const parsed = yamlSchema.safeParse((0, yaml_1.parse)(source));
132
+ if (!parsed.success) {
133
+ const issues = parsed.error.issues.map((issue) => ` - ${issue.path.join(".") || "(root)"}: ${issue.message}`);
134
+ throw new Error(`Invalid ${fileLabel}:\n${issues.join("\n")}`);
135
+ }
136
+ const cfg = parsed.data;
137
+ return {
138
+ upstreams: Object.fromEntries(Object.entries(cfg.upstreams).map(([name, upstream]) => [
139
+ name,
140
+ interpolateUpstream(name, upstream),
141
+ ])),
142
+ namespaced: true,
143
+ labels: cfg.labels,
144
+ rules: cfg.rules,
145
+ taint: cfg.taint,
146
+ approval: cfg.approval,
147
+ defaults: cfg.defaults,
148
+ audit: cfg.audit,
149
+ interceptors: cfg.interceptors,
150
+ };
151
+ }
152
+ /**
153
+ * The 0.x single-server config keeps its behavior: tool names are not prefixed,
154
+ * payloads are logged, and a toxic flow only warns.
155
+ */
156
+ function fromLegacyConfig(config) {
157
+ return {
158
+ upstreams: { default: config.server },
159
+ namespaced: false,
160
+ labels: {},
161
+ rules: [],
162
+ taint: { mode: "warn" },
163
+ approval: { timeoutSeconds: 120 },
164
+ defaults: { action: "allow" },
165
+ audit: { includePayloads: true, ...(config.audit ?? { enabled: true, sink: "console" }) },
166
+ interceptors: config.interceptors ?? {},
167
+ };
168
+ }
169
+ function configFlag(argv) {
170
+ const end = argv.indexOf("--");
171
+ const own = end === -1 ? argv : argv.slice(0, end);
172
+ const at = own.indexOf("--config");
173
+ if (at === -1)
174
+ return null;
175
+ const value = own[at + 1];
176
+ if (!value)
177
+ throw new Error("--config needs a file path");
178
+ return value;
179
+ }
180
+ function isYaml(filePath) {
181
+ return /\.ya?ml$/i.test(filePath);
182
+ }
183
+ /**
184
+ * 1. `--config <file.yaml>` 2. GUARDBEE_PROXY_CONFIG pointing at a .yaml/.yml
185
+ * 3. ./guardbee-proxy.yaml (or .yml) 4. the legacy JSON / `-- <command>` / PROXY_* setup.
186
+ */
187
+ function loadGatewayConfig(argv = process.argv, cwd = process.cwd()) {
188
+ const explicit = configFlag(argv);
189
+ const fromEnv = process.env["GUARDBEE_PROXY_CONFIG"];
190
+ const candidates = explicit
191
+ ? [explicit]
192
+ : fromEnv && isYaml(fromEnv)
193
+ ? [fromEnv]
194
+ : [path_1.default.join(cwd, "guardbee-proxy.yaml"), path_1.default.join(cwd, "guardbee-proxy.yml")];
195
+ for (const candidate of candidates) {
196
+ const resolved = candidate.startsWith("~/") ? path_1.default.join(process.env["HOME"] ?? "", candidate.slice(2)) : candidate;
197
+ if (!fs_1.default.existsSync(resolved)) {
198
+ if (candidate === explicit || candidate === fromEnv)
199
+ throw new Error(`Config file not found: ${resolved}`);
200
+ continue;
201
+ }
202
+ return parseGatewayYaml(fs_1.default.readFileSync(resolved, "utf8"), path_1.default.basename(resolved));
203
+ }
204
+ return fromLegacyConfig((0, config_js_1.loadProxyConfig)(argv));
205
+ }
206
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/gateway/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ /**
3
+ * Replace the values of the named keys with `[MASKED]` — in JSON text content
4
+ * and in structuredContent. Key names compare case-insensitively.
5
+ */
6
+ export declare function maskFields(result: CallToolResult, fieldNames: readonly string[]): CallToolResult;
7
+ //# sourceMappingURL=fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/gateway/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AA2BzE;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAUhG"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.maskFields = maskFields;
4
+ const MASKED = "[MASKED]";
5
+ function blankKeys(value, fields) {
6
+ if (Array.isArray(value))
7
+ return value.map((item) => blankKeys(item, fields));
8
+ if (value && typeof value === "object") {
9
+ return Object.fromEntries(Object.entries(value).map(([key, v]) => [key, fields.has(key.toLowerCase()) ? MASKED : blankKeys(v, fields)]));
10
+ }
11
+ return value;
12
+ }
13
+ /** A text item that holds JSON (as most DB and API tools return) is parsed, blanked and re-serialized. */
14
+ function blankText(text, fields) {
15
+ const trimmed = text.trim();
16
+ if (!trimmed.startsWith("{") && !trimmed.startsWith("["))
17
+ return text;
18
+ let parsed;
19
+ try {
20
+ parsed = JSON.parse(trimmed);
21
+ }
22
+ catch {
23
+ return text;
24
+ }
25
+ return JSON.stringify(blankKeys(parsed, fields), null, trimmed.includes("\n") ? 2 : undefined);
26
+ }
27
+ /**
28
+ * Replace the values of the named keys with `[MASKED]` — in JSON text content
29
+ * and in structuredContent. Key names compare case-insensitively.
30
+ */
31
+ function maskFields(result, fieldNames) {
32
+ const fields = new Set(fieldNames.map((name) => name.toLowerCase()));
33
+ if (fields.size === 0)
34
+ return result;
35
+ return {
36
+ ...result,
37
+ content: result.content.map((item) => (item.type === "text" ? { ...item, text: blankText(item.text, fields) } : item)),
38
+ ...(result.structuredContent
39
+ ? { structuredContent: blankKeys(result.structuredContent, fields) }
40
+ : {}),
41
+ };
42
+ }
43
+ //# sourceMappingURL=fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/gateway/fields.ts"],"names":[],"mappings":";;AA+BA,gCAUC;AAvCD,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B,SAAS,SAAS,CAAC,KAAc,EAAE,MAA2B;IAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9E,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAC9G,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0GAA0G;AAC1G,SAAS,SAAS,CAAC,IAAY,EAAE,MAA2B;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtE,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACjG,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,MAAsB,EAAE,UAA6B;IAC9E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtH,GAAG,CAAC,MAAM,CAAC,iBAAiB;YAC1B,CAAC,CAAC,EAAE,iBAAiB,EAAE,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAA4B,EAAE;YAC/F,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,59 @@
1
+ import type { CallToolResult, GetPromptResult, Prompt, ReadResourceResult, Resource, Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { AuditLogger } from "../audit/logger.js";
3
+ import type { Approver } from "./approval.js";
4
+ import type { GatewayConfig } from "./config.js";
5
+ import { TaintTracker } from "./taint.js";
6
+ import { PiiVault } from "./tokens.js";
7
+ import type { Upstream } from "./upstream.js";
8
+ /**
9
+ * The policy pipeline between the agent and its MCP servers. Transport-free:
10
+ * proxy.ts wires it to stdio, tests drive it directly.
11
+ *
12
+ * A tool call runs: input injection scan → definition drift → policy rules
13
+ * (incl. approval) → toxic-flow check → detokenize → upstream → result
14
+ * injection scan → PII masking / tokenizing → field masking → taint update.
15
+ */
16
+ export declare class Gateway {
17
+ private readonly upstreams;
18
+ private readonly config;
19
+ private readonly audit;
20
+ private readonly approver?;
21
+ readonly taint: TaintTracker;
22
+ readonly vault: PiiVault;
23
+ private readonly pins;
24
+ private readonly tools;
25
+ private readonly resources;
26
+ private readonly prompts;
27
+ /** Upstreams that announced tools/list_changed since the agent last listed tools. */
28
+ private readonly stale;
29
+ private readonly toolListeners;
30
+ constructor(upstreams: readonly Upstream[], config: GatewayConfig, audit: AuditLogger, approver?: Approver | undefined);
31
+ /** Called when any upstream's tool list changed; proxy.ts relays it to the agent. */
32
+ onToolsChanged(listener: () => void): void;
33
+ private get interceptors();
34
+ private exposed;
35
+ private pinFor;
36
+ private log;
37
+ private get driftEnabled();
38
+ private get driftAction();
39
+ private get resultAction();
40
+ /**
41
+ * Find PII in a value (it taints the session either way) and hide it unless
42
+ * masking is off. `force` comes from a `mask` rule and overrides "off".
43
+ */
44
+ private protect;
45
+ listTools(): Promise<Tool[]>;
46
+ callTool(name: string, args: Record<string, unknown>): Promise<CallToolResult>;
47
+ listResources(): Promise<Resource[]>;
48
+ /** Resource contents come from outside the agent's control: they taint the session like an untrusted tool. */
49
+ readResource(uri: string): Promise<ReadResourceResult>;
50
+ listPrompts(): Promise<Prompt[]>;
51
+ /**
52
+ * A prompt template is text a server puts straight into the conversation, so
53
+ * it gets the same injection scan and PII masking as a tool result. It does
54
+ * not taint the session: the person picked it.
55
+ */
56
+ getPrompt(name: string, args?: Record<string, string>): Promise<GetPromptResult>;
57
+ close(): Promise<void>;
58
+ }
59
+ //# sourceMappingURL=gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,MAAM,EACN,kBAAkB,EAClB,QAAQ,EACR,IAAI,EACL,MAAM,oCAAoC,CAAC;AAG5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAgB9C;;;;;;;GAOG;AACH,qBAAa,OAAO;IAYhB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAd5B,QAAQ,CAAC,KAAK,eAAsB;IACpC,QAAQ,CAAC,KAAK,WAAkB;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwC;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2D;IACnF,qFAAqF;IACrF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;gBAGjC,SAAS,EAAE,SAAS,QAAQ,EAAE,EAC9B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,WAAW,EAClB,QAAQ,CAAC,EAAE,QAAQ,YAAA;IAUtC,qFAAqF;IACrF,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI1C,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,GAAG;IAIX,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED;;;OAGG;IACH,OAAO,CAAC,OAAO;IAST,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAmC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IA+J9E,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAe1C,8GAA8G;IACxG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkCtD,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBtC;;;;OAIG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAqBhF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}