@intutic/mcp-governance-proxy 2.2.0 → 2.3.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 +7 -6
- package/dist/agentTools.d.ts +68 -0
- package/dist/agentTools.d.ts.map +1 -0
- package/dist/agentTools.js +150 -0
- package/dist/agentTools.js.map +1 -0
- package/dist/anomaly/detectors.js +1 -1
- package/dist/anomaly/detectors.js.map +1 -1
- package/dist/approvalHold.d.ts +8 -7
- package/dist/approvalHold.d.ts.map +1 -1
- package/dist/approvalHold.js +7 -6
- package/dist/approvalHold.js.map +1 -1
- package/dist/budget.d.ts +133 -0
- package/dist/budget.d.ts.map +1 -0
- package/dist/budget.js +191 -0
- package/dist/budget.js.map +1 -0
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/daemon/healthMonitor.d.ts.map +1 -1
- package/dist/daemon/healthMonitor.js +0 -1
- package/dist/daemon/healthMonitor.js.map +1 -1
- package/dist/daemon/index.d.ts +0 -2
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +0 -2
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/policyCache.d.ts +15 -3
- package/dist/daemon/policyCache.d.ts.map +1 -1
- package/dist/daemon/policyCache.js +36 -15
- package/dist/daemon/policyCache.js.map +1 -1
- package/dist/daemon/socketServer.d.ts +0 -1
- package/dist/daemon/socketServer.d.ts.map +1 -1
- package/dist/daemon/socketServer.js +0 -1
- package/dist/daemon/socketServer.js.map +1 -1
- package/dist/daemon/statusReporter.d.ts.map +1 -1
- package/dist/daemon/statusReporter.js +0 -1
- package/dist/daemon/statusReporter.js.map +1 -1
- package/dist/daemon/telemetryBatcher.d.ts.map +1 -1
- package/dist/daemon/telemetryBatcher.js +0 -1
- package/dist/daemon/telemetryBatcher.js.map +1 -1
- package/dist/daemonClient.d.ts.map +1 -1
- package/dist/daemonClient.js +0 -1
- package/dist/daemonClient.js.map +1 -1
- package/dist/dlp.d.ts +32 -3
- package/dist/dlp.d.ts.map +1 -1
- package/dist/dlp.js +116 -18
- package/dist/dlp.js.map +1 -1
- package/dist/dlpPii.d.ts +66 -0
- package/dist/dlpPii.d.ts.map +1 -0
- package/dist/dlpPii.js +235 -0
- package/dist/dlpPii.js.map +1 -0
- package/dist/emitter.d.ts +27 -3
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +7 -1
- package/dist/emitter.js.map +1 -1
- package/dist/guardedValkey.d.ts +40 -0
- package/dist/guardedValkey.d.ts.map +1 -0
- package/dist/guardedValkey.js +84 -0
- package/dist/guardedValkey.js.map +1 -0
- package/dist/injection.js +1 -1
- package/dist/interceptor.d.ts +53 -10
- package/dist/interceptor.d.ts.map +1 -1
- package/dist/interceptor.js +154 -65
- package/dist/interceptor.js.map +1 -1
- package/dist/policy.d.ts +21 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +29 -2
- package/dist/policy.js.map +1 -1
- package/dist/proxy.d.ts +25 -6
- package/dist/proxy.d.ts.map +1 -1
- package/dist/proxy.js +113 -51
- package/dist/proxy.js.map +1 -1
- package/dist/refusals.d.ts +26 -0
- package/dist/refusals.d.ts.map +1 -0
- package/dist/refusals.js +43 -0
- package/dist/refusals.js.map +1 -0
- package/dist/registryObserver.d.ts +9 -5
- package/dist/registryObserver.d.ts.map +1 -1
- package/dist/registryObserver.js +19 -8
- package/dist/registryObserver.js.map +1 -1
- package/dist/session.d.ts +1 -1
- package/dist/session.js +1 -1
- package/dist/sessionScope.d.ts +1 -1
- package/dist/sessionScope.js +1 -1
- package/dist/sessionStore.d.ts +10 -23
- package/dist/sessionStore.d.ts.map +1 -1
- package/dist/sessionStore.js +17 -76
- package/dist/sessionStore.js.map +1 -1
- package/dist/wasm/context.d.ts +10 -0
- package/dist/wasm/context.d.ts.map +1 -1
- package/dist/wasm/context.js +27 -0
- package/dist/wasm/context.js.map +1 -1
- package/dist/wasm/hostImports.d.ts +3 -3
- package/dist/wasm/hostImports.d.ts.map +1 -1
- package/dist/wasm/hostImports.js +8 -7
- package/dist/wasm/hostImports.js.map +1 -1
- package/dist/wasm/loader.d.ts +8 -1
- package/dist/wasm/loader.d.ts.map +1 -1
- package/dist/wasm/loader.js +2 -0
- package/dist/wasm/loader.js.map +1 -1
- package/dist/wasm/referencedFiles.d.ts +29 -4
- package/dist/wasm/referencedFiles.d.ts.map +1 -1
- package/dist/wasm/referencedFiles.js +48 -21
- package/dist/wasm/referencedFiles.js.map +1 -1
- package/dist/wasm/runner.d.ts +106 -22
- package/dist/wasm/runner.d.ts.map +1 -1
- package/dist/wasm/runner.js +194 -74
- package/dist/wasm/runner.js.map +1 -1
- package/dist/wasm/watch.js +1 -1
- package/dist/wasm/worker.d.ts +10 -6
- package/dist/wasm/worker.d.ts.map +1 -1
- package/dist/wasm/worker.js +93 -9
- package/dist/wasm/worker.js.map +1 -1
- package/package.json +5 -4
- package/dist/toolPoison.d.ts +0 -32
- package/dist/toolPoison.d.ts.map +0 -1
- package/dist/toolPoison.js +0 -81
- package/dist/toolPoison.js.map +0 -1
- package/dist/wasm/fuel.d.ts +0 -35
- package/dist/wasm/fuel.d.ts.map +0 -1
- package/dist/wasm/fuel.js +0 -299
- package/dist/wasm/fuel.js.map +0 -1
- package/dist/wasm/memoryCap.d.ts +0 -21
- package/dist/wasm/memoryCap.d.ts.map +0 -1
- package/dist/wasm/memoryCap.js +0 -54
- package/dist/wasm/memoryCap.js.map +0 -1
- package/dist/wasm/wasmBinary.d.ts +0 -25
- package/dist/wasm/wasmBinary.d.ts.map +0 -1
- package/dist/wasm/wasmBinary.js +0 -100
- package/dist/wasm/wasmBinary.js.map +0 -1
package/dist/policy.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import { createStderrLogger as createLogger } from './stderrLog.js';
|
|
10
10
|
import { callDaemonSocket } from './daemonClient.js';
|
|
11
11
|
import { HttpStatusError, httpRequest } from './httpJson.js';
|
|
12
|
+
import { parseMcpBudgetPolicy, parseWorkspacePiiDetectors, } from '@intutic/shared-types';
|
|
12
13
|
const log = createLogger('mcp-proxy-policy');
|
|
13
14
|
/**
|
|
14
15
|
* Is this unvalidated object actually a policy rule?
|
|
@@ -51,6 +52,7 @@ export const UNRESTRICTED_REGISTRY = Object.freeze({
|
|
|
51
52
|
defaultPolicy: 'allow',
|
|
52
53
|
approvedServers: [],
|
|
53
54
|
blockedServers: [],
|
|
55
|
+
heldServers: [],
|
|
54
56
|
disabledTools: {},
|
|
55
57
|
});
|
|
56
58
|
function stringList(value) {
|
|
@@ -78,6 +80,7 @@ export function parseRegistry(value) {
|
|
|
78
80
|
defaultPolicy: value['defaultPolicy'] === 'deny' ? 'deny' : 'allow',
|
|
79
81
|
approvedServers: stringList(value['approvedServers']),
|
|
80
82
|
blockedServers: stringList(value['blockedServers']),
|
|
83
|
+
heldServers: stringList(value['heldServers']),
|
|
81
84
|
disabledTools,
|
|
82
85
|
};
|
|
83
86
|
}
|
|
@@ -116,7 +119,7 @@ export class PolicyClient {
|
|
|
116
119
|
* wired to nothing.
|
|
117
120
|
*/
|
|
118
121
|
dlpPatterns = [];
|
|
119
|
-
/** Workspace injection-pattern sources (`mcpInjectionPatterns
|
|
122
|
+
/** Workspace injection-pattern sources (`mcpInjectionPatterns`); empty = floor only. */
|
|
120
123
|
injectionPatterns = [];
|
|
121
124
|
/**
|
|
122
125
|
* Additive tool scoping: when non-empty, ONLY these tools may be called
|
|
@@ -175,6 +178,15 @@ export class PolicyClient {
|
|
|
175
178
|
*/
|
|
176
179
|
failOpen;
|
|
177
180
|
ssoGroupPolicy;
|
|
181
|
+
/** The workspace's MCP call budgets (`mcpBudgets`); no budgets until a policy says otherwise. */
|
|
182
|
+
mcpBudgets = parseMcpBudgetPolicy(undefined);
|
|
183
|
+
/**
|
|
184
|
+
* The workspace's `piiDetectors` setting, read as the LLM proxy reads it
|
|
185
|
+
* from key-context (`parseWorkspacePiiDetectors`). `none` until a policy
|
|
186
|
+
* carries one. `unreadable` when the control plane says it could not read
|
|
187
|
+
* the stored value; the interceptor applies the fail setting to that.
|
|
188
|
+
*/
|
|
189
|
+
piiDetectors = { kind: 'none' };
|
|
178
190
|
/** The first refresh `start()` kicks off, so the first tool call can wait for it. */
|
|
179
191
|
firstRefresh = null;
|
|
180
192
|
lastRefreshAttemptAt = 0;
|
|
@@ -255,6 +267,14 @@ export class PolicyClient {
|
|
|
255
267
|
getSsoGroupPolicy() {
|
|
256
268
|
return this.ssoGroupPolicy;
|
|
257
269
|
}
|
|
270
|
+
/** The workspace's MCP call budgets; an empty list means no limits. */
|
|
271
|
+
getMcpBudgets() {
|
|
272
|
+
return this.mcpBudgets;
|
|
273
|
+
}
|
|
274
|
+
/** The workspace's PII detector actions (see the field). */
|
|
275
|
+
getPiiDetectors() {
|
|
276
|
+
return this.piiDetectors;
|
|
277
|
+
}
|
|
258
278
|
/** The workspace's fail-open choice, or `undefined` to fall back to the local setting (see the field). */
|
|
259
279
|
getFailOpen() {
|
|
260
280
|
return this.failOpen;
|
|
@@ -340,8 +360,13 @@ export class PolicyClient {
|
|
|
340
360
|
}
|
|
341
361
|
this.principal = parsePrincipal(source['principal']);
|
|
342
362
|
this.ssoGroupPolicy = parseSsoGroupPolicy(source['ssoGroupPolicy']);
|
|
363
|
+
this.mcpBudgets = parseMcpBudgetPolicy(source['mcpBudgets']);
|
|
343
364
|
const failBehavior = source['mcpProxyFailBehavior'];
|
|
344
365
|
this.failOpen = failBehavior === 'open' ? true : failBehavior === 'closed' ? false : undefined;
|
|
366
|
+
this.piiDetectors = parseWorkspacePiiDetectors(source['piiDetectors']);
|
|
367
|
+
if (this.piiDetectors.kind === 'unreadable') {
|
|
368
|
+
log.warn({ action: 'pii_detectors_unreadable', reason: this.piiDetectors.reason }, 'Workspace PII detector actions unreadable');
|
|
369
|
+
}
|
|
345
370
|
}
|
|
346
371
|
/** Find the first matching rule for a given tool name + serialized args. */
|
|
347
372
|
matchRule(toolName, toolInputJson) {
|
|
@@ -405,8 +430,10 @@ export class PolicyClient {
|
|
|
405
430
|
}
|
|
406
431
|
this.dlpPatterns = (policy.dlpPatterns ?? []).filter((p) => typeof p === 'string');
|
|
407
432
|
this.absorbCuration(policy);
|
|
433
|
+
// Re-parsed, not trusted: a daemon on an older version, or an entry it
|
|
434
|
+
// cached before a field existed, can carry a registry without one.
|
|
408
435
|
if (policy.mcpRegistry)
|
|
409
|
-
this.registry = policy.mcpRegistry;
|
|
436
|
+
this.registry = parseRegistry(policy.mcpRegistry) ?? this.registry;
|
|
410
437
|
if (!policy.fromSnapshot)
|
|
411
438
|
this.loadedFromControlPlane = true;
|
|
412
439
|
log.info({ action: 'policy_refreshed_from_daemon', ruleCount: this.rules.length }, 'SOP rules refreshed from daemon');
|
package/dist/policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy.d.ts
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Architecture (standalone mode — the `intutic` harness entry):
|
|
9
9
|
* Harness ↔ [McpGovernanceProxy as MCP Server] ↔ Control Plane REST API
|
|
10
|
-
* Exposes governance tools: intutic_governance_status, intutic_list_sops, intutic_list_incidents
|
|
10
|
+
* Exposes governance tools: intutic_governance_status, intutic_list_sops, intutic_list_incidents,
|
|
11
|
+
* intutic_hold_status, intutic_mcp_registry_status, intutic_mcp_budget_remaining.
|
|
11
12
|
*
|
|
12
13
|
* Architecture (remote bridge mode — `--remote-url`, see remoteBridge.ts):
|
|
13
14
|
* Harness stdin → [McpGovernanceProxy] → remote MCP server (HTTP/SSE)
|
|
@@ -31,6 +32,14 @@ import { ToolCallInterceptor } from './interceptor.js';
|
|
|
31
32
|
import { type InjectionSource } from './injection.js';
|
|
32
33
|
import { type AnomalyFinding } from './anomaly/index.js';
|
|
33
34
|
import { SessionState } from './session.js';
|
|
35
|
+
import { type CallerIdentity } from './identity.js';
|
|
36
|
+
import { type McpToolDefinition } from '@intutic/shared-types';
|
|
37
|
+
/**
|
|
38
|
+
* Who a per-member MCP budget counts when the control plane has not named the
|
|
39
|
+
* member behind this proxy's key: the key's prefix, else the OS user. Callers
|
|
40
|
+
* with neither share one allowance.
|
|
41
|
+
*/
|
|
42
|
+
export declare function fallbackBudgetCaller(identity: CallerIdentity): string;
|
|
34
43
|
/** What the harness asked for under a given request id, awaiting its response. */
|
|
35
44
|
export interface PendingRequest {
|
|
36
45
|
method: 'tools/call' | 'tools/list' | 'resources/read';
|
|
@@ -56,8 +65,12 @@ export interface ServerLineOutcome {
|
|
|
56
65
|
* other line.
|
|
57
66
|
*/
|
|
58
67
|
toolsListTools?: Array<Record<string, unknown>>;
|
|
59
|
-
/**
|
|
60
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Every tool the upstream server declared, as it declared them — before
|
|
70
|
+
* curation hid any or an override rewrote a description. Set alongside
|
|
71
|
+
* `toolsListTools`; the registry gets these.
|
|
72
|
+
*/
|
|
73
|
+
toolsListUpstream?: McpToolDefinition[];
|
|
61
74
|
/** The JSON-RPC id of the `tools/list` response, needed to build a block
|
|
62
75
|
* frame in the caller if TOFU refuses it. Set alongside `toolsListTools`. */
|
|
63
76
|
toolsListMsgId?: string | number | null;
|
|
@@ -160,12 +173,18 @@ export declare class McpGovernanceProxy {
|
|
|
160
173
|
* (for detection + reask counting), `handleHarnessLine` (for post-decision
|
|
161
174
|
* recording), and this class's own `handleServerLine` (for caching the
|
|
162
175
|
* post-curation tools/list the tool_poisoning detector reads). Since Wave
|
|
163
|
-
* 5.3
|
|
176
|
+
* 5.3 it is also shared ACROSS the session's sibling proxy
|
|
164
177
|
* processes through `sessionStore` when a Valkey URL is configured — see
|
|
165
178
|
* session.ts's module doc.
|
|
166
179
|
*/
|
|
167
180
|
private readonly session;
|
|
168
|
-
/**
|
|
181
|
+
/**
|
|
182
|
+
* The process's one Valkey connection, when `config.valkeyUrl` is set and
|
|
183
|
+
* this is not the standalone entry: the shared session window and the MCP
|
|
184
|
+
* call budgets both use it.
|
|
185
|
+
*/
|
|
186
|
+
private readonly valkey;
|
|
187
|
+
/** The Valkey-backed shared window, on {@link valkey}. */
|
|
169
188
|
private readonly sessionStore;
|
|
170
189
|
/**
|
|
171
190
|
* Phase 3's WASM custom-rule runner — owns the one dedicated
|
|
@@ -202,7 +221,7 @@ export declare class McpGovernanceProxy {
|
|
|
202
221
|
startPolicy(): void;
|
|
203
222
|
private wasmWatch;
|
|
204
223
|
/**
|
|
205
|
-
* Hot reload for `~/.intutic/wasm
|
|
224
|
+
* Hot reload for `~/.intutic/wasm/`: a directory watcher, not a
|
|
206
225
|
* second timer, so a dropped-in rule takes effect within a second instead
|
|
207
226
|
* of at the next 60-second tick. Re-armed on every tick because the
|
|
208
227
|
* directory may not exist when the proxy starts.
|
package/dist/proxy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy.js
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Architecture (standalone mode — the `intutic` harness entry):
|
|
9
9
|
* Harness ↔ [McpGovernanceProxy as MCP Server] ↔ Control Plane REST API
|
|
10
|
-
* Exposes governance tools: intutic_governance_status, intutic_list_sops, intutic_list_incidents
|
|
10
|
+
* Exposes governance tools: intutic_governance_status, intutic_list_sops, intutic_list_incidents,
|
|
11
|
+
* intutic_hold_status, intutic_mcp_registry_status, intutic_mcp_budget_remaining.
|
|
11
12
|
*
|
|
12
13
|
* Architecture (remote bridge mode — `--remote-url`, see remoteBridge.ts):
|
|
13
14
|
* Harness stdin → [McpGovernanceProxy] → remote MCP server (HTTP/SSE)
|
|
@@ -32,16 +33,20 @@ import { createStderrLogger as createLogger } from './stderrLog.js';
|
|
|
32
33
|
import { PolicyClient } from './policy.js';
|
|
33
34
|
import { GovernanceEmitter, detectionFinding } from './emitter.js';
|
|
34
35
|
import { ToolCallInterceptor } from './interceptor.js';
|
|
35
|
-
import {
|
|
36
|
+
import { budgetRemaining, describeFailure, holdStatus, readControlPlane, registryStatus } from './agentTools.js';
|
|
37
|
+
import { redactText as redactMcpText, setWorkspacePii } from './dlp.js';
|
|
36
38
|
import { scanText, injectionSeverity, setDynamicInjectionPatterns } from './injection.js';
|
|
37
39
|
import { toolPoisoning, dlpEscalation } from './anomaly/index.js';
|
|
38
40
|
import { SessionState } from './session.js';
|
|
39
41
|
import { ValkeySessionStore } from './sessionStore.js';
|
|
42
|
+
import { GuardedValkey } from './guardedValkey.js';
|
|
43
|
+
import { McpBudgetEnforcer, ValkeyBudgetStore } from './budget.js';
|
|
40
44
|
import { WasmRunner } from './wasm/runner.js';
|
|
41
45
|
import { checkTofu, decideTofuAction } from './tofu.js';
|
|
42
46
|
import { RegistryObserver } from './registryObserver.js';
|
|
43
47
|
import { ApprovalHolds } from './approvalHold.js';
|
|
44
48
|
import { callerIdentity } from './identity.js';
|
|
49
|
+
import { normalizeToolDefinition } from '@intutic/shared-types';
|
|
45
50
|
import { PACKAGE_VERSION } from './version.js';
|
|
46
51
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
47
52
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
@@ -49,34 +54,53 @@ import { z } from 'zod';
|
|
|
49
54
|
import { watchWasmDir } from './wasm/watch.js';
|
|
50
55
|
const log = createLogger('mcp-governance-proxy');
|
|
51
56
|
/**
|
|
52
|
-
* Build a JSON-RPC 2.0 error response for a blocked tool call.
|
|
57
|
+
* Build a JSON-RPC 2.0 error response for a blocked tool call. `data` names
|
|
58
|
+
* the refusal for a client that reads it programmatically (refusals.ts).
|
|
53
59
|
*/
|
|
54
|
-
function buildBlockResponse(id, reason) {
|
|
60
|
+
function buildBlockResponse(id, reason, data) {
|
|
55
61
|
return {
|
|
56
62
|
jsonrpc: '2.0',
|
|
57
63
|
id,
|
|
58
64
|
error: {
|
|
59
65
|
code: -32603, // Internal error (closest standard code to "blocked")
|
|
60
66
|
message: `[Intutic Governance] Tool call blocked: ${reason}`,
|
|
67
|
+
data,
|
|
61
68
|
},
|
|
62
69
|
};
|
|
63
70
|
}
|
|
71
|
+
/** The `error.data` of a block decision: its code, rule id and detail. */
|
|
72
|
+
function blockData(decision) {
|
|
73
|
+
return { code: decision.code, ruleId: decision.ruleId, ...decision.detail };
|
|
74
|
+
}
|
|
64
75
|
/**
|
|
65
76
|
* The JSON-RPC error for a call held for approval. Same code as a block (the
|
|
66
77
|
* call did not run), a message that says "held" rather than "blocked", and
|
|
67
|
-
* the hold id in `data` for a client that reads it programmatically
|
|
78
|
+
* the hold id in `data` for a client that reads it programmatically — empty
|
|
79
|
+
* when the hold could not be recorded, so there is nothing to approve yet.
|
|
68
80
|
*/
|
|
69
|
-
function buildHoldResponse(id, reason, holdId) {
|
|
81
|
+
function buildHoldResponse(id, reason, holdId, ruleId) {
|
|
70
82
|
return {
|
|
71
83
|
jsonrpc: '2.0',
|
|
72
84
|
id,
|
|
73
85
|
error: {
|
|
74
86
|
code: -32603,
|
|
75
87
|
message: `[Intutic Governance] Tool call ${reason}`,
|
|
76
|
-
data: { status: 'pending_approval', holdId },
|
|
88
|
+
data: { code: 'HELD', ruleId, status: 'pending_approval', holdId },
|
|
77
89
|
},
|
|
78
90
|
};
|
|
79
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Who a per-member MCP budget counts when the control plane has not named the
|
|
94
|
+
* member behind this proxy's key: the key's prefix, else the OS user. Callers
|
|
95
|
+
* with neither share one allowance.
|
|
96
|
+
*/
|
|
97
|
+
export function fallbackBudgetCaller(identity) {
|
|
98
|
+
if (identity.apiKeyPrefix)
|
|
99
|
+
return `key:${identity.apiKeyPrefix}`;
|
|
100
|
+
if (identity.osUser)
|
|
101
|
+
return `os:${identity.osUser}`;
|
|
102
|
+
return 'unknown';
|
|
103
|
+
}
|
|
80
104
|
/**
|
|
81
105
|
* Write a JSON-RPC frame to stdout (the ONLY valid place to write in a stdio MCP proxy).
|
|
82
106
|
*/
|
|
@@ -111,7 +135,7 @@ function writeFrame(frame) {
|
|
|
111
135
|
* change; the override controls what the agent actually reads.
|
|
112
136
|
*/
|
|
113
137
|
export function processServerLine(raw, pending, allowedTools, overrides, injectionAction = 'warn', injectionPatterns = [], disabledTools = []) {
|
|
114
|
-
// Workspace-supplied injection patterns
|
|
138
|
+
// Workspace-supplied injection patterns, on top of the floor.
|
|
115
139
|
// Idempotent when the list has not changed, so this is cheap per line.
|
|
116
140
|
setDynamicInjectionPatterns(injectionPatterns);
|
|
117
141
|
const trimmed = raw.trim();
|
|
@@ -161,6 +185,7 @@ export function processServerLine(raw, pending, allowedTools, overrides, injecti
|
|
|
161
185
|
message: `[Intutic Governance] Result withheld: it contained sensitive data ` +
|
|
162
186
|
`whose redaction did not survive re-parsing. The tool ran; its output ` +
|
|
163
187
|
`was not delivered. (${findings.map((f) => f.description).join('; ')})`,
|
|
188
|
+
data: { code: 'RESULT_WITHHELD_DLP', ruleId: `dlp.${findings[0]?.pattern ?? 'output'}` },
|
|
164
189
|
},
|
|
165
190
|
};
|
|
166
191
|
return { line: JSON.stringify(withheld), redactedTool, redactions };
|
|
@@ -187,6 +212,7 @@ export function processServerLine(raw, pending, allowedTools, overrides, injecti
|
|
|
187
212
|
message: `[Intutic Governance] Result withheld: it triggered prompt-injection ` +
|
|
188
213
|
`pattern(s) (${injectionPatterns.join(', ')}). The tool call already ran; ` +
|
|
189
214
|
`its output was not delivered.`,
|
|
215
|
+
data: { code: 'RESULT_WITHHELD_INJECTION', ruleId: 'injection.tool_result' },
|
|
190
216
|
},
|
|
191
217
|
};
|
|
192
218
|
return {
|
|
@@ -221,9 +247,10 @@ export function processServerLine(raw, pending, allowedTools, overrides, injecti
|
|
|
221
247
|
return { line: raw };
|
|
222
248
|
let hidden = 0;
|
|
223
249
|
let overridden = 0;
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
.
|
|
250
|
+
// Copied before the overrides below rewrite descriptions in place.
|
|
251
|
+
const upstream = tools
|
|
252
|
+
.map(normalizeToolDefinition)
|
|
253
|
+
.filter((t) => t !== null);
|
|
227
254
|
let kept = tools;
|
|
228
255
|
if (allowedTools.length > 0 || disabledTools.length > 0) {
|
|
229
256
|
kept = kept.filter((t) => {
|
|
@@ -277,7 +304,7 @@ export function processServerLine(raw, pending, allowedTools, overrides, injecti
|
|
|
277
304
|
return {
|
|
278
305
|
line: raw,
|
|
279
306
|
toolsListTools: kept,
|
|
280
|
-
|
|
307
|
+
toolsListUpstream: upstream,
|
|
281
308
|
toolsListMsgId: msg.id,
|
|
282
309
|
injectionFindings,
|
|
283
310
|
toolPoisoning: toolPoisoningFinding ?? undefined,
|
|
@@ -288,7 +315,7 @@ export function processServerLine(raw, pending, allowedTools, overrides, injecti
|
|
|
288
315
|
line: JSON.stringify(msg),
|
|
289
316
|
curated: { hidden, overridden },
|
|
290
317
|
toolsListTools: kept,
|
|
291
|
-
|
|
318
|
+
toolsListUpstream: upstream,
|
|
292
319
|
toolsListMsgId: msg.id,
|
|
293
320
|
injectionFindings,
|
|
294
321
|
toolPoisoning: toolPoisoningFinding ?? undefined,
|
|
@@ -343,10 +370,10 @@ export function handleHarnessLine(line, pending, interceptor, forward, session)
|
|
|
343
370
|
interceptor.decide(toolName, toolInput).then((decision) => {
|
|
344
371
|
if (decision.action === 'block') {
|
|
345
372
|
log.warn({ action: 'tool_blocked', toolName, reason: decision.reason }, 'Tool call blocked by governance proxy');
|
|
346
|
-
writeFrame(buildBlockResponse(msg.id, decision.reason));
|
|
373
|
+
writeFrame(buildBlockResponse(msg.id, decision.reason, blockData(decision)));
|
|
347
374
|
}
|
|
348
375
|
else if (decision.action === 'hold') {
|
|
349
|
-
writeFrame(buildHoldResponse(msg.id, decision.reason, decision.holdId));
|
|
376
|
+
writeFrame(buildHoldResponse(msg.id, decision.reason, decision.holdId, decision.ruleId));
|
|
350
377
|
}
|
|
351
378
|
else {
|
|
352
379
|
// Allow: the response now needs inspecting on the way back —
|
|
@@ -385,12 +412,18 @@ export class McpGovernanceProxy {
|
|
|
385
412
|
* (for detection + reask counting), `handleHarnessLine` (for post-decision
|
|
386
413
|
* recording), and this class's own `handleServerLine` (for caching the
|
|
387
414
|
* post-curation tools/list the tool_poisoning detector reads). Since Wave
|
|
388
|
-
* 5.3
|
|
415
|
+
* 5.3 it is also shared ACROSS the session's sibling proxy
|
|
389
416
|
* processes through `sessionStore` when a Valkey URL is configured — see
|
|
390
417
|
* session.ts's module doc.
|
|
391
418
|
*/
|
|
392
419
|
session;
|
|
393
|
-
/**
|
|
420
|
+
/**
|
|
421
|
+
* The process's one Valkey connection, when `config.valkeyUrl` is set and
|
|
422
|
+
* this is not the standalone entry: the shared session window and the MCP
|
|
423
|
+
* call budgets both use it.
|
|
424
|
+
*/
|
|
425
|
+
valkey;
|
|
426
|
+
/** The Valkey-backed shared window, on {@link valkey}. */
|
|
394
427
|
sessionStore;
|
|
395
428
|
/**
|
|
396
429
|
* Phase 3's WASM custom-rule runner — owns the one dedicated
|
|
@@ -407,10 +440,12 @@ export class McpGovernanceProxy {
|
|
|
407
440
|
this.policy = new PolicyClient(config.controlPlaneUrl, config.apiKey, config.workspaceId, config.policyTtlMs, config.mcpProxyMode);
|
|
408
441
|
const identity = callerIdentity(config.apiKey, config.serverName, config.sessionScope);
|
|
409
442
|
this.emitter = new GovernanceEmitter(config.controlPlaneUrl, config.apiKey, config.eventsFilePath, config.workspaceId, config.mcpProxyMode, identity);
|
|
443
|
+
this.valkey = config.valkeyUrl ? new GuardedValkey(config.valkeyUrl) : undefined;
|
|
410
444
|
// The standalone `intutic` entry fronts no real server and records no
|
|
411
|
-
// calls worth sharing;
|
|
412
|
-
|
|
413
|
-
|
|
445
|
+
// calls worth sharing; it reads Valkey only for the budget counters its
|
|
446
|
+
// `intutic_mcp_budget_remaining` tool reports. Every wrapped server gets
|
|
447
|
+
// the shared window.
|
|
448
|
+
this.sessionStore = this.valkey && !config.standalone ? new ValkeySessionStore(this.valkey) : undefined;
|
|
414
449
|
this.session = new SessionState({ scope: config.sessionScope, store: this.sessionStore });
|
|
415
450
|
log.info({ action: 'session_scope', scope: config.sessionScope ?? null, shared: Boolean(this.sessionStore && config.sessionScope) }, this.sessionStore && config.sessionScope
|
|
416
451
|
? 'Anomaly session window shared with sibling proxies through Valkey'
|
|
@@ -419,7 +454,7 @@ export class McpGovernanceProxy {
|
|
|
419
454
|
this.registryObserver = config.standalone
|
|
420
455
|
? undefined
|
|
421
456
|
: new RegistryObserver(config.controlPlaneUrl, config.apiKey, config.serverName, config.remoteTransport ?? 'stdio');
|
|
422
|
-
this.interceptor = new ToolCallInterceptor(this.policy, this.emitter, config.failOpen, config.serverName, config.mcpInjectionAction, this.session, config.mcpAnomalyMode, config.mcpAnomalyOverrides, this.wasmRunner, config.workspaceId, new ApprovalHolds(config.controlPlaneUrl, config.apiKey, config.workspaceId, config.serverName, identity));
|
|
457
|
+
this.interceptor = new ToolCallInterceptor(this.policy, this.emitter, config.failOpen, config.serverName, config.mcpInjectionAction, this.session, config.mcpAnomalyMode, config.mcpAnomalyOverrides, this.wasmRunner, config.workspaceId, new ApprovalHolds(config.controlPlaneUrl, config.apiKey, config.workspaceId, config.serverName, identity), new McpBudgetEnforcer(this.valkey ? new ValkeyBudgetStore(this.valkey) : undefined, config.workspaceId, config.serverName, fallbackBudgetCaller(identity)));
|
|
423
458
|
}
|
|
424
459
|
/**
|
|
425
460
|
* The tools/call decision engine — exposed so `remoteBridge.ts` can drive
|
|
@@ -455,7 +490,7 @@ export class McpGovernanceProxy {
|
|
|
455
490
|
}
|
|
456
491
|
wasmWatch = null;
|
|
457
492
|
/**
|
|
458
|
-
* Hot reload for `~/.intutic/wasm
|
|
493
|
+
* Hot reload for `~/.intutic/wasm/`: a directory watcher, not a
|
|
459
494
|
* second timer, so a dropped-in rule takes effect within a second instead
|
|
460
495
|
* of at the next 60-second tick. Re-armed on every tick because the
|
|
461
496
|
* directory may not exist when the proxy starts.
|
|
@@ -474,7 +509,7 @@ export class McpGovernanceProxy {
|
|
|
474
509
|
this.wasmWatch?.close();
|
|
475
510
|
this.wasmWatch = null;
|
|
476
511
|
void this.wasmRunner.shutdown();
|
|
477
|
-
void this.
|
|
512
|
+
void this.valkey?.close();
|
|
478
513
|
}
|
|
479
514
|
/**
|
|
480
515
|
* Start the proxy. Dispatches to standalone or proxy mode based on config.
|
|
@@ -500,31 +535,7 @@ export class McpGovernanceProxy {
|
|
|
500
535
|
const cpUrl = this.config.controlPlaneUrl;
|
|
501
536
|
const apiKey = this.config.apiKey;
|
|
502
537
|
const workspaceId = this.config.workspaceId;
|
|
503
|
-
|
|
504
|
-
try {
|
|
505
|
-
const res = await fetch(`${cpUrl}${path}`, {
|
|
506
|
-
headers: {
|
|
507
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
508
|
-
'x-workspace-id': workspaceId,
|
|
509
|
-
},
|
|
510
|
-
signal: AbortSignal.timeout(5000),
|
|
511
|
-
});
|
|
512
|
-
if (res.status === 403)
|
|
513
|
-
return { ok: false, reason: 'forbidden' };
|
|
514
|
-
if (!res.ok)
|
|
515
|
-
return { ok: false, reason: 'unreachable' };
|
|
516
|
-
return { ok: true, data: await res.json() };
|
|
517
|
-
}
|
|
518
|
-
catch {
|
|
519
|
-
return { ok: false, reason: 'unreachable' };
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
/** Renders a failed call as text for the agent, naming the actual cause. */
|
|
523
|
-
function describeFailure(result, what) {
|
|
524
|
-
return result.reason === 'forbidden'
|
|
525
|
-
? `Your Intutic role is not permitted to ${what}. This needs the OWNER, ADMIN or EM role.`
|
|
526
|
-
: `Could not reach control plane to ${what}.`;
|
|
527
|
-
}
|
|
538
|
+
const callControlPlane = (path) => readControlPlane(cpUrl, apiKey, workspaceId, path);
|
|
528
539
|
// Tool: intutic_governance_status
|
|
529
540
|
server.tool('intutic_governance_status', 'Returns the current governance status and health of the Intutic control plane for this workspace.', {}, async () => {
|
|
530
541
|
const health = await callControlPlane('/healthz');
|
|
@@ -562,6 +573,54 @@ export class McpGovernanceProxy {
|
|
|
562
573
|
content: [{ type: 'text', text }],
|
|
563
574
|
};
|
|
564
575
|
});
|
|
576
|
+
// Tool: intutic_hold_status
|
|
577
|
+
server.tool('intutic_hold_status', 'Reports whether a held tool call (a refusal with code HELD and a hold id) has been approved or rejected, ' +
|
|
578
|
+
'and whether retrying the identical call will now pass. Pass the hold id the refusal gave (hold_…).', { holdId: z.string().min(1).max(128).describe('The hold id from the refusal, hold_…') }, async ({ holdId }) => {
|
|
579
|
+
const decision = await callControlPlane(`/api/v1/decisions/${encodeURIComponent(holdId)}`);
|
|
580
|
+
let text;
|
|
581
|
+
if (!decision.ok) {
|
|
582
|
+
text =
|
|
583
|
+
decision.reason === 'not_found'
|
|
584
|
+
? `No hold ${holdId} was found in this workspace. Check the id the refusal gave; a hold that could not be recorded has none.`
|
|
585
|
+
: describeFailure(decision, `report hold ${holdId}`);
|
|
586
|
+
}
|
|
587
|
+
else {
|
|
588
|
+
// Only an approval needs the bypasses, to say whether a retry passes.
|
|
589
|
+
const status = decision.data.status;
|
|
590
|
+
const bypasses = status === 'APPROVED' ? await callControlPlane('/api/v1/decisions/approved-bypasses') : null;
|
|
591
|
+
text = JSON.stringify(holdStatus(holdId, decision.data, bypasses?.ok ? bypasses.data : null), null, 2);
|
|
592
|
+
}
|
|
593
|
+
return { content: [{ type: 'text', text }] };
|
|
594
|
+
});
|
|
595
|
+
// Tool: intutic_mcp_registry_status
|
|
596
|
+
server.tool('intutic_mcp_registry_status', "Reports what this workspace's MCP server registry says about each server: whether calls to it are allowed " +
|
|
597
|
+
'or refused (blocked, held after a risky tool change, or not approved under a deny default), and which of its ' +
|
|
598
|
+
'tools are switched off.', { server: z.string().min(1).max(256).optional().describe('One server name; every server when omitted') }, async ({ server: name }) => {
|
|
599
|
+
const result = await callControlPlane('/api/v1/mcp/servers');
|
|
600
|
+
const text = result.ok
|
|
601
|
+
? JSON.stringify(registryStatus(result.data, name), null, 2)
|
|
602
|
+
: describeFailure(result, 'read the MCP server registry');
|
|
603
|
+
return { content: [{ type: 'text', text }] };
|
|
604
|
+
});
|
|
605
|
+
// Tool: intutic_mcp_budget_remaining
|
|
606
|
+
server.tool('intutic_mcp_budget_remaining', "Lists this workspace's MCP call budgets that count your calls, with how many calls each has left this " +
|
|
607
|
+
'period and when it resets. Counts are read from the Valkey the MCP proxies on this machine count in.', {}, async () => {
|
|
608
|
+
await this.policy.ready();
|
|
609
|
+
const identity = callerIdentity(apiKey, 'intutic', this.config.sessionScope);
|
|
610
|
+
const store = this.valkey ? new ValkeyBudgetStore(this.valkey) : undefined;
|
|
611
|
+
const budgets = await budgetRemaining(this.policy.getMcpBudgets(), workspaceId, { memberId: this.policy.getPrincipal()?.memberId ?? null, fallback: fallbackBudgetCaller(identity) }, async (keys) => store?.used(keys));
|
|
612
|
+
const unread = budgets.some((b) => b.used === null);
|
|
613
|
+
const text = JSON.stringify({
|
|
614
|
+
budgets,
|
|
615
|
+
...(unread
|
|
616
|
+
? {
|
|
617
|
+
note: 'Used counts are null: this server has no Valkey to read them from (INTUTIC_VALKEY_URL), or it ' +
|
|
618
|
+
'did not answer. The limits still apply.',
|
|
619
|
+
}
|
|
620
|
+
: {}),
|
|
621
|
+
}, null, 2);
|
|
622
|
+
return { content: [{ type: 'text', text }] };
|
|
623
|
+
});
|
|
565
624
|
const transport = new StdioServerTransport();
|
|
566
625
|
await server.connect(transport);
|
|
567
626
|
log.info({ action: 'standalone_ready' }, 'Intutic MCP server ready');
|
|
@@ -596,6 +655,9 @@ export class McpGovernanceProxy {
|
|
|
596
655
|
*/
|
|
597
656
|
async handleServerLine(rawLine, pending) {
|
|
598
657
|
const injectionAction = this.policy.getInjectionAction() ?? this.config.mcpInjectionAction;
|
|
658
|
+
// Results are redacted with the workspace's PII detector actions too —
|
|
659
|
+
// a resources/read answer can arrive before any tools/call set them.
|
|
660
|
+
setWorkspacePii(this.policy.getPiiDetectors());
|
|
599
661
|
const outcome = processServerLine(rawLine, pending, this.policy.getAllowedTools(), this.policy.getToolDescriptionOverrides(), injectionAction, this.policy.getInjectionPatterns(), this.policy.getRegistry()?.disabledTools[this.config.serverName] ?? []);
|
|
600
662
|
if (outcome.injectionFindings) {
|
|
601
663
|
for (const finding of outcome.injectionFindings) {
|
|
@@ -659,7 +721,7 @@ export class McpGovernanceProxy {
|
|
|
659
721
|
if (outcome.toolsListTools) {
|
|
660
722
|
// The registry gets the server's own tool names, before curation:
|
|
661
723
|
// per-tool toggles must be able to re-enable a tool curation hid.
|
|
662
|
-
void this.registryObserver?.observe(outcome.
|
|
724
|
+
void this.registryObserver?.observe(outcome.toolsListUpstream ?? []);
|
|
663
725
|
// Cache the post-curation tools/list for Phase 2's tool_poisoning
|
|
664
726
|
// detector (already applied above, from this same outcome) and for
|
|
665
727
|
// Phase 3's WASM rule context (`tools` field) once that lands.
|
|
@@ -683,7 +745,7 @@ export class McpGovernanceProxy {
|
|
|
683
745
|
if (!this.interceptor.failOpen) {
|
|
684
746
|
writeFrame(buildBlockResponse(outcome.toolsListMsgId ?? null, `TOFU pin check for MCP server "${serverName}" failed (could not read/write ` +
|
|
685
747
|
`~/.intutic/mcp-pins/). Blocked by workspace policy (fail-closed mode). ` +
|
|
686
|
-
`Contact your administrator or update mcpProxyFailBehavior to open
|
|
748
|
+
`Contact your administrator or update mcpProxyFailBehavior to open.`, { code: 'TOFU_UNAVAILABLE', ruleId: 'mcpProxyFailBehavior' }));
|
|
687
749
|
return;
|
|
688
750
|
}
|
|
689
751
|
process.stdout.write(outcome.line + '\n');
|
|
@@ -715,7 +777,7 @@ export class McpGovernanceProxy {
|
|
|
715
777
|
}, reason);
|
|
716
778
|
this.emitter.emit('mcp_server_definition_changed', serverName, undefined, reason);
|
|
717
779
|
if (action.block) {
|
|
718
|
-
writeFrame(buildBlockResponse(outcome.toolsListMsgId ?? null, reason));
|
|
780
|
+
writeFrame(buildBlockResponse(outcome.toolsListMsgId ?? null, reason, { code: 'TOOL_DEFINITIONS_CHANGED', ruleId: `tofu.${serverName}` }));
|
|
719
781
|
return;
|
|
720
782
|
}
|
|
721
783
|
}
|