orbitx 0.2.7 → 0.2.8
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/dist/core/mcp-client.d.ts +3 -2
- package/dist/core/mcp-client.d.ts.map +1 -1
- package/dist/core/mcp-client.js +13 -4
- package/dist/core/mcp-client.js.map +1 -1
- package/dist/core/mcp-execution-policy.d.ts +14 -0
- package/dist/core/mcp-execution-policy.d.ts.map +1 -0
- package/dist/core/mcp-execution-policy.js +9 -0
- package/dist/core/mcp-execution-policy.js.map +1 -0
- package/dist/core/mcp-filter.d.ts +6 -2
- package/dist/core/mcp-filter.d.ts.map +1 -1
- package/dist/core/mcp-filter.js +4 -2
- package/dist/core/mcp-filter.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/tests/core/mcp-execution-policy.test.d.ts +2 -0
- package/dist/tests/core/mcp-execution-policy.test.d.ts.map +1 -0
- package/dist/tests/core/mcp-execution-policy.test.js +77 -0
- package/dist/tests/core/mcp-execution-policy.test.js.map +1 -0
- package/dist/tests/core/mcp-output-filter.test.d.ts +2 -0
- package/dist/tests/core/mcp-output-filter.test.d.ts.map +1 -0
- package/dist/tests/core/mcp-output-filter.test.js +43 -0
- package/dist/tests/core/mcp-output-filter.test.js.map +1 -0
- package/dist/tests/index.d.ts +2 -0
- package/dist/tests/index.d.ts.map +1 -1
- package/dist/tests/index.js +2 -0
- package/dist/tests/index.js.map +1 -1
- package/docs/api-reference.md +2 -1
- package/docs/mcp-architecture.md +38 -4
- package/docs/tools.md +2 -2
- package/package.json +1 -1
|
@@ -3,14 +3,15 @@ import type MCPConnection from "./mcp-connection.js";
|
|
|
3
3
|
import { MCP } from "./mcp.js";
|
|
4
4
|
import MCPRNG from "./mcp-rng.js";
|
|
5
5
|
import type MCPStorage from "./mcp-storage.js";
|
|
6
|
-
import
|
|
6
|
+
import MCPOutputFilter from "./mcp-filter.js";
|
|
7
|
+
import MCPExecutionPolicy from "./mcp-execution-policy.js";
|
|
7
8
|
import type { ProviderType } from "./ai-provider.js";
|
|
8
9
|
type ExecuteProviderHandler = (toolCallId: string, type: ProviderType, input: Record<string, any>) => Promise<{
|
|
9
10
|
output: Record<string, any>;
|
|
10
11
|
}>;
|
|
11
12
|
export declare class MCPClient extends MCP {
|
|
12
13
|
#private;
|
|
13
|
-
constructor(envID: string, connection: MCPConnection | MCPConnection[], storage?: MCPStorage, rng?: MCPRNG, mcpFilter?:
|
|
14
|
+
constructor(envID: string, connection: MCPConnection | MCPConnection[], storage?: MCPStorage, rng?: MCPRNG, mcpFilter?: MCPOutputFilter, executionPolicy?: MCPExecutionPolicy);
|
|
14
15
|
getStorage(): MCPStorage;
|
|
15
16
|
getRNG(): MCPRNG;
|
|
16
17
|
setExecuteProviderHandler(handler: ExecuteProviderHandler): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/core/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,GAAG,EAAuB,MAAM,UAAU,CAAC;AACpD,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAE/C,OAAO,
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/core/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,GAAG,EAAuB,MAAM,UAAU,CAAC;AACpD,OAAO,MAAM,MAAM,cAAc,CAAC;AAClC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAE/C,OAAO,eAAe,MAAM,iBAAiB,CAAC;AAC9C,OAAO,kBAAgD,MAAM,2BAA2B,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,KAAK,sBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC,CAAC;AAE/I,qBAAa,SAAU,SAAQ,GAAG;;gBAUlB,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,GAAG,aAAa,EAAE,EAAE,OAAO,GAAE,UAA+B,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,eAAe,EAAE,eAAe,CAAC,EAAE,kBAAkB;IA+BjM,UAAU,IAAI,UAAU;IAIxB,MAAM,IAAI,MAAM;IAIhB,yBAAyB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAIhE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC;IAOvH,QAAQ;cAGI,MAAM;qBACC,MAAM;gBACX;YACJ,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;YAC3D,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;YACnB,OAAO,CAAC,EAAE,GAAG,CAAC;SACjB,EAAE;;IAwCT,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM;IAyCjF,YAAY,CAAC,IAAI,EAAE,OAAO;CAI7B;AAED,eAAe,SAAS,CAAC"}
|
package/dist/core/mcp-client.js
CHANGED
|
@@ -2,26 +2,31 @@ import { randomUUID } from "crypto";
|
|
|
2
2
|
import { MCP, normalizeToolOutput } from "./mcp.js";
|
|
3
3
|
import MCPRNG from "./mcp-rng.js";
|
|
4
4
|
import MCPFSStorage from "./mcp-fs-storage.js";
|
|
5
|
-
import
|
|
5
|
+
import MCPOutputFilter from "./mcp-filter.js";
|
|
6
|
+
import MCPExecutionPolicy, { MCPBypassExecutionPolicy } from "./mcp-execution-policy.js";
|
|
6
7
|
export class MCPClient extends MCP {
|
|
7
8
|
#connections;
|
|
8
9
|
#storage;
|
|
9
10
|
#rng;
|
|
10
11
|
#mcpFilter;
|
|
12
|
+
#executionPolicy;
|
|
11
13
|
#tools = [];
|
|
12
14
|
#envID;
|
|
13
15
|
#executeProviderHandler;
|
|
14
|
-
constructor(envID, connection, storage = new MCPFSStorage(), rng, mcpFilter) {
|
|
16
|
+
constructor(envID, connection, storage = new MCPFSStorage(), rng, mcpFilter, executionPolicy) {
|
|
15
17
|
super();
|
|
16
18
|
this.#storage = storage;
|
|
17
19
|
if (!rng)
|
|
18
20
|
rng = new MCPRNG(storage);
|
|
19
21
|
if (!mcpFilter)
|
|
20
|
-
mcpFilter = new
|
|
21
|
-
// /\b(?:10\.|172\.(?:1[6-9]|2\d|3[01])\.|192\.168\.)\d{1,3}\.\d{1,3}\b/g // Prevent any local ip leakage by default you can pass empty
|
|
22
|
+
mcpFilter = new MCPOutputFilter([
|
|
23
|
+
// /\b(?:10\.|172\.(?:1[6-9]|2\d|3[01])\.|192\.168\.)\d{1,3}\.\d{1,3}\b/g // Prevent any local ip leakage by default you can pass empty MCPOutputFilter to disable it
|
|
22
24
|
// we add some default security roles after this feature become stable
|
|
23
25
|
]);
|
|
26
|
+
if (!executionPolicy)
|
|
27
|
+
executionPolicy = new MCPBypassExecutionPolicy();
|
|
24
28
|
this.#mcpFilter = mcpFilter;
|
|
29
|
+
this.#executionPolicy = executionPolicy;
|
|
25
30
|
this.#rng = rng;
|
|
26
31
|
this.#connections = Array.isArray(connection) ? connection : [connection];
|
|
27
32
|
this.#envID = envID;
|
|
@@ -90,6 +95,10 @@ export class MCPClient extends MCP {
|
|
|
90
95
|
return [...clientTools, ...connectionsTools.filter(t => !clientToolNames.has(t.name))];
|
|
91
96
|
}
|
|
92
97
|
async callTool(toolName, inputs, toolCallId) {
|
|
98
|
+
const authorized = await this.#executionPolicy.authorize({ toolName, inputs, envID: this.#envID, toolCallId });
|
|
99
|
+
if (!authorized) {
|
|
100
|
+
throw new Error(`MCPExecutionPolicy denied tool call "${toolName}".`);
|
|
101
|
+
}
|
|
93
102
|
const clientTool = this.#tools.find(t => t.getOptions().name == toolName);
|
|
94
103
|
if (clientTool) {
|
|
95
104
|
const raw = await clientTool.getOptions().execute(this.#envID, inputs, toolCallId, clientTool.getMCP());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/core/mcp-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/core/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface MCPToolCallRequest {
|
|
2
|
+
toolName: string;
|
|
3
|
+
inputs: Record<string, any>;
|
|
4
|
+
envID: string;
|
|
5
|
+
toolCallId?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare abstract class MCPExecutionPolicy {
|
|
8
|
+
abstract authorize(request: MCPToolCallRequest): Promise<boolean> | boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare class MCPBypassExecutionPolicy extends MCPExecutionPolicy {
|
|
11
|
+
authorize(): boolean;
|
|
12
|
+
}
|
|
13
|
+
export default MCPExecutionPolicy;
|
|
14
|
+
//# sourceMappingURL=mcp-execution-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-execution-policy.d.ts","sourceRoot":"","sources":["../../src/core/mcp-execution-policy.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,8BAAsB,kBAAkB;IACpC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO;CAC9E;AAED,qBAAa,wBAAyB,SAAQ,kBAAkB;IAC5D,SAAS,IAAI,OAAO;CAGvB;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-execution-policy.js","sourceRoot":"","sources":["../../src/core/mcp-execution-policy.ts"],"names":[],"mappings":"AAOA,MAAM,OAAgB,kBAAkB;CAEvC;AAED,MAAM,OAAO,wBAAyB,SAAQ,kBAAkB;IAC5D,SAAS;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
export declare class
|
|
1
|
+
export declare class MCPOutputFilter {
|
|
2
2
|
#private;
|
|
3
3
|
constructor(values: (string | RegExp)[]);
|
|
4
4
|
filter(input: any): any;
|
|
5
5
|
}
|
|
6
|
-
|
|
6
|
+
/** @deprecated Renamed to `MCPOutputFilter` — this alias will be removed in 1.0.0. */
|
|
7
|
+
export declare const MCPFilter: typeof MCPOutputFilter;
|
|
8
|
+
/** @deprecated Renamed to `MCPOutputFilter` — this alias will be removed in 1.0.0. */
|
|
9
|
+
export type MCPFilter = MCPOutputFilter;
|
|
10
|
+
export default MCPOutputFilter;
|
|
7
11
|
//# sourceMappingURL=mcp-filter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-filter.d.ts","sourceRoot":"","sources":["../../src/core/mcp-filter.ts"],"names":[],"mappings":"AAAA,qBAAa,
|
|
1
|
+
{"version":3,"file":"mcp-filter.d.ts","sourceRoot":"","sources":["../../src/core/mcp-filter.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;;gBAGZ,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE;IAIvC,MAAM,CAAC,KAAK,EAAE,GAAG;CAoBpB;AAED,sFAAsF;AACtF,eAAO,MAAM,SAAS,wBAAkB,CAAC;AACzC,sFAAsF;AACtF,MAAM,MAAM,SAAS,GAAG,eAAe,CAAC;AAExC,eAAe,eAAe,CAAC"}
|
package/dist/core/mcp-filter.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export class
|
|
1
|
+
export class MCPOutputFilter {
|
|
2
2
|
#values;
|
|
3
3
|
constructor(values) {
|
|
4
4
|
this.#values = values;
|
|
@@ -24,5 +24,7 @@ export class MCPFilter {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
/** @deprecated Renamed to `MCPOutputFilter` — this alias will be removed in 1.0.0. */
|
|
28
|
+
export const MCPFilter = MCPOutputFilter;
|
|
29
|
+
export default MCPOutputFilter;
|
|
28
30
|
//# sourceMappingURL=mcp-filter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-filter.js","sourceRoot":"","sources":["../../src/core/mcp-filter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"mcp-filter.js","sourceRoot":"","sources":["../../src/core/mcp-filter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAe;IACxB,OAAO,CAAsB;IAE7B,YAAY,MAA2B;QACnC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,KAAU;QACb,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC;YAC3C,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAEtD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC/B,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;oBAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;oBAC1E,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBAChF,CAAC;qBAAM,CAAC;oBACJ,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;gBACzD,CAAC;YACL,CAAC;YAED,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAC1C,CAAC;IACL,CAAC;CACJ;AAED,sFAAsF;AACtF,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC;AAIzC,eAAe,eAAe,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -23,7 +23,9 @@ export type { AgentProviderEntry, AgentProvidersInput } from "./core/agent-provi
|
|
|
23
23
|
export { MCPRNG } from "./core/mcp-rng.js";
|
|
24
24
|
export { MCPStorage } from "./core/mcp-storage.js";
|
|
25
25
|
export { MCPFSStorage } from "./core/mcp-fs-storage.js";
|
|
26
|
-
export { MCPFilter } from "./core/mcp-filter.js";
|
|
26
|
+
export { MCPOutputFilter, MCPFilter } from "./core/mcp-filter.js";
|
|
27
|
+
export { MCPExecutionPolicy, MCPBypassExecutionPolicy } from "./core/mcp-execution-policy.js";
|
|
28
|
+
export type { MCPToolCallRequest } from "./core/mcp-execution-policy.js";
|
|
27
29
|
export { SimpleAgent } from "./templates/simple.js";
|
|
28
30
|
export { WorkerAgent } from "./core/worker-agent.js";
|
|
29
31
|
export type { WorkerAgentRating } from "./core/worker-agent.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC5N,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACnF,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC5E,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACpF,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEzF,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,8 @@ export { resolveAgentProviders, ProviderRegistry } from "./core/agent-providers.
|
|
|
18
18
|
export { MCPRNG } from "./core/mcp-rng.js";
|
|
19
19
|
export { MCPStorage } from "./core/mcp-storage.js";
|
|
20
20
|
export { MCPFSStorage } from "./core/mcp-fs-storage.js";
|
|
21
|
-
export { MCPFilter } from "./core/mcp-filter.js";
|
|
21
|
+
export { MCPOutputFilter, MCPFilter } from "./core/mcp-filter.js";
|
|
22
|
+
export { MCPExecutionPolicy, MCPBypassExecutionPolicy } from "./core/mcp-execution-policy.js";
|
|
22
23
|
export { SimpleAgent } from "./templates/simple.js";
|
|
23
24
|
export { WorkerAgent } from "./core/worker-agent.js";
|
|
24
25
|
export { AgentTools, AgentListTool, AgentHireTool, AgentPromptTool, AgentReportTool, AgentRegistry, } from "./tools/agent/index.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEnF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGpF,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-execution-policy.test.d.ts","sourceRoot":"","sources":["../../../src/tests/core/mcp-execution-policy.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { test, before, after, describe } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { MCPClient, MCPConnection, MCPServer, MCPTool, MCPExecutionPolicy, MCPBypassExecutionPolicy, } from "../../index.js";
|
|
4
|
+
const EchoTool = () => new MCPTool({
|
|
5
|
+
name: "echo",
|
|
6
|
+
description: "echoes its input back",
|
|
7
|
+
inputs: [{ name: "value", type: "string", description: "value to echo" }],
|
|
8
|
+
execute: async (_envID, inputs) => ({ value: inputs.value }),
|
|
9
|
+
});
|
|
10
|
+
class AllowlistPolicy extends MCPExecutionPolicy {
|
|
11
|
+
#allowed;
|
|
12
|
+
calls = [];
|
|
13
|
+
constructor(allowed) {
|
|
14
|
+
super();
|
|
15
|
+
this.#allowed = new Set(allowed);
|
|
16
|
+
}
|
|
17
|
+
authorize(request) {
|
|
18
|
+
this.calls.push(request);
|
|
19
|
+
return this.#allowed.has(request.toolName);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
class AsyncDenyPolicy extends MCPExecutionPolicy {
|
|
23
|
+
async authorize() {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
describe("core/mcp-execution-policy", () => {
|
|
28
|
+
let mcpConnection;
|
|
29
|
+
let mcpServer;
|
|
30
|
+
before(async () => {
|
|
31
|
+
mcpConnection = new MCPConnection();
|
|
32
|
+
mcpServer = new MCPServer(mcpConnection);
|
|
33
|
+
mcpServer.registerTool(EchoTool());
|
|
34
|
+
});
|
|
35
|
+
after(async () => {
|
|
36
|
+
mcpConnection?.close();
|
|
37
|
+
});
|
|
38
|
+
test("MCPExecutionPolicy: defaults to MCPBypassExecutionPolicy, allowing every call", async () => {
|
|
39
|
+
const client = new MCPClient("policy-default", mcpConnection);
|
|
40
|
+
const result = await client.callTool("echo", { value: "hi" });
|
|
41
|
+
assert.equal(result.output.value, "hi");
|
|
42
|
+
});
|
|
43
|
+
test("MCPExecutionPolicy: MCPBypassExecutionPolicy.authorize() always returns true", () => {
|
|
44
|
+
const policy = new MCPBypassExecutionPolicy();
|
|
45
|
+
assert.equal(policy.authorize(), true);
|
|
46
|
+
});
|
|
47
|
+
test("MCPExecutionPolicy: a denying policy rejects the call before it reaches the tool", async () => {
|
|
48
|
+
const client = new MCPClient("policy-deny", mcpConnection, undefined, undefined, undefined, new AsyncDenyPolicy());
|
|
49
|
+
await assert.rejects(() => client.callTool("echo", { value: "hi" }), /MCPExecutionPolicy denied tool call "echo"/);
|
|
50
|
+
});
|
|
51
|
+
test("MCPExecutionPolicy: an allowlist policy only allows listed tool names", async () => {
|
|
52
|
+
const policy = new AllowlistPolicy(["echo"]);
|
|
53
|
+
const client = new MCPClient("policy-allowlist", mcpConnection, undefined, undefined, undefined, policy);
|
|
54
|
+
const result = await client.callTool("echo", { value: "ok" });
|
|
55
|
+
assert.equal(result.output.value, "ok");
|
|
56
|
+
await assert.rejects(() => client.callTool("not-a-real-tool", {}));
|
|
57
|
+
});
|
|
58
|
+
test("MCPExecutionPolicy: authorize() receives toolName, inputs, envID, and toolCallId", async () => {
|
|
59
|
+
const policy = new AllowlistPolicy(["echo"]);
|
|
60
|
+
const client = new MCPClient("policy-request-shape", mcpConnection, undefined, undefined, undefined, policy);
|
|
61
|
+
await client.callTool("echo", { value: "hi" }, "call-123");
|
|
62
|
+
assert.equal(policy.calls.length, 1);
|
|
63
|
+
assert.deepEqual(policy.calls[0], {
|
|
64
|
+
toolName: "echo",
|
|
65
|
+
inputs: { value: "hi" },
|
|
66
|
+
envID: "policy-request-shape",
|
|
67
|
+
toolCallId: "call-123",
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
test("MCPExecutionPolicy: also gates a locally client-registered tool", async () => {
|
|
71
|
+
const policy = new AllowlistPolicy([]);
|
|
72
|
+
const client = new MCPClient("policy-local-tool", mcpConnection, undefined, undefined, undefined, policy);
|
|
73
|
+
client.registerTool(EchoTool());
|
|
74
|
+
await assert.rejects(() => client.callTool("echo", { value: "hi" }), /MCPExecutionPolicy denied tool call "echo"/);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=mcp-execution-policy.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-execution-policy.test.js","sourceRoot":"","sources":["../../../src/tests/core/mcp-execution-policy.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-output-filter.test.d.ts","sourceRoot":"","sources":["../../../src/tests/core/mcp-output-filter.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { test, before, after, describe } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { MCPClient, MCPConnection, MCPServer, MCPOutputFilter, MCPFilter, MCPTool } from "../../index.js";
|
|
4
|
+
const SecretTool = () => new MCPTool({
|
|
5
|
+
name: "get-secret",
|
|
6
|
+
description: "returns a value containing a secret token",
|
|
7
|
+
inputs: [],
|
|
8
|
+
execute: async () => ({ message: "your api key is sk-1234567890abcdef" }),
|
|
9
|
+
});
|
|
10
|
+
describe("core/mcp-output-filter", () => {
|
|
11
|
+
let mcpConnection;
|
|
12
|
+
let mcpServer;
|
|
13
|
+
before(async () => {
|
|
14
|
+
mcpConnection = new MCPConnection();
|
|
15
|
+
mcpServer = new MCPServer(mcpConnection);
|
|
16
|
+
mcpServer.registerTool(SecretTool());
|
|
17
|
+
});
|
|
18
|
+
after(async () => {
|
|
19
|
+
mcpConnection?.close();
|
|
20
|
+
});
|
|
21
|
+
test("MCPOutputFilter: redacts a literal string match in tool output", async () => {
|
|
22
|
+
const filter = new MCPOutputFilter(["sk-1234567890abcdef"]);
|
|
23
|
+
const client = new MCPClient("filter-literal", mcpConnection, undefined, undefined, filter);
|
|
24
|
+
const result = await client.callTool("get-secret", {});
|
|
25
|
+
assert.ok(!JSON.stringify(result.output).includes("sk-1234567890abcdef"), "secret should not appear in output");
|
|
26
|
+
assert.equal(result.output.message, "your api key is FILTERED_OUTPUT");
|
|
27
|
+
});
|
|
28
|
+
test("MCPOutputFilter: redacts a regex match in tool output", async () => {
|
|
29
|
+
const filter = new MCPOutputFilter([/sk-[a-zA-Z0-9]{10,}/]);
|
|
30
|
+
const client = new MCPClient("filter-regex", mcpConnection, undefined, undefined, filter);
|
|
31
|
+
const result = await client.callTool("get-secret", {});
|
|
32
|
+
assert.equal(result.output.message, "your api key is FILTERED_OUTPUT");
|
|
33
|
+
});
|
|
34
|
+
test("MCPOutputFilter: no values configured leaves output untouched", async () => {
|
|
35
|
+
const client = new MCPClient("filter-none", mcpConnection, undefined, undefined, new MCPOutputFilter([]));
|
|
36
|
+
const result = await client.callTool("get-secret", {});
|
|
37
|
+
assert.equal(result.output.message, "your api key is sk-1234567890abcdef");
|
|
38
|
+
});
|
|
39
|
+
test("MCPOutputFilter: MCPFilter is a deprecated alias for the same class", () => {
|
|
40
|
+
assert.equal(MCPFilter, MCPOutputFilter);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=mcp-output-filter.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-output-filter.test.js","sourceRoot":"","sources":["../../../src/tests/core/mcp-output-filter.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tests/index.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import "./core/mcp-computer.test.js";
|
|
|
2
2
|
import "./core/mcp-connection.test.js";
|
|
3
3
|
import "./core/mcp-ipc-connection.test.js";
|
|
4
4
|
import "./core/mcp-ws-connection.test.js";
|
|
5
|
+
import "./core/mcp-output-filter.test.js";
|
|
6
|
+
import "./core/mcp-execution-policy.test.js";
|
|
5
7
|
import "./tools/utils/delay.test.js";
|
|
6
8
|
import "./tools/utils/get-current-time.test.js";
|
|
7
9
|
import "./tools/utils/read-image.test.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tests/index.ts"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tests/index.ts"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qCAAqC,CAAC;AAG7C,OAAO,6BAA6B,CAAC;AACrC,OAAO,wCAAwC,CAAC;AAChD,OAAO,kCAAkC,CAAC;AAE1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,+BAA+B,CAAC;AACvC,OAAO,8BAA8B,CAAC;AACtC,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,2BAA2B,CAAC;AACnC,OAAO,yBAAyB,CAAC;AACjC,OAAO,yBAAyB,CAAC;AAEjC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AACxC,OAAO,+BAA+B,CAAC;AACvC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,iCAAiC,CAAC;AAEzC,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,kCAAkC,CAAC;AAE1C,OAAO,0BAA0B,CAAC;AAClC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AAExC,OAAO,iDAAiD,CAAC;AAEzD,OAAO,uCAAuC,CAAC;AAE/C,OAAO,mCAAmC,CAAC"}
|
package/dist/tests/index.js
CHANGED
|
@@ -2,6 +2,8 @@ import "./core/mcp-computer.test.js";
|
|
|
2
2
|
import "./core/mcp-connection.test.js";
|
|
3
3
|
import "./core/mcp-ipc-connection.test.js";
|
|
4
4
|
import "./core/mcp-ws-connection.test.js";
|
|
5
|
+
import "./core/mcp-output-filter.test.js";
|
|
6
|
+
import "./core/mcp-execution-policy.test.js";
|
|
5
7
|
import "./tools/utils/delay.test.js";
|
|
6
8
|
import "./tools/utils/get-current-time.test.js";
|
|
7
9
|
import "./tools/utils/read-image.test.js";
|
package/dist/tests/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tests/index.ts"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tests/index.ts"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,mCAAmC,CAAC;AAC3C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qCAAqC,CAAC;AAG7C,OAAO,6BAA6B,CAAC;AACrC,OAAO,wCAAwC,CAAC;AAChD,OAAO,kCAAkC,CAAC;AAE1C,OAAO,8BAA8B,CAAC;AACtC,OAAO,+BAA+B,CAAC;AACvC,OAAO,8BAA8B,CAAC;AACtC,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,2BAA2B,CAAC;AACnC,OAAO,yBAAyB,CAAC;AACjC,OAAO,yBAAyB,CAAC;AAEjC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AACxC,OAAO,+BAA+B,CAAC;AACvC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,iCAAiC,CAAC;AAEzC,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,kCAAkC,CAAC;AAE1C,OAAO,0BAA0B,CAAC;AAClC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,2BAA2B,CAAC;AACnC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gCAAgC,CAAC;AAExC,OAAO,iDAAiD,CAAC;AAEzD,OAAO,uCAAuC,CAAC;AAE/C,OAAO,mCAAmC,CAAC"}
|
package/docs/api-reference.md
CHANGED
|
@@ -50,4 +50,5 @@ Built-in tool factories, grouped by domain (each domain also exports a `*Tools()
|
|
|
50
50
|
- `MCPComputer` *(experimental)*
|
|
51
51
|
- `MCPStorage`, `MCPFSStorage`
|
|
52
52
|
- `MCPRNG`
|
|
53
|
-
- `MCPFilter`
|
|
53
|
+
- `MCPOutputFilter` (`MCPFilter` is a deprecated alias, removed in `1.0.0`)
|
|
54
|
+
- `MCPExecutionPolicy`, `MCPBypassExecutionPolicy`, type `MCPToolCallRequest`
|
package/docs/mcp-architecture.md
CHANGED
|
@@ -24,7 +24,7 @@ Registers tools and listens on its `connection` for incoming tool-call requests,
|
|
|
24
24
|
### `MCPClient`
|
|
25
25
|
|
|
26
26
|
```ts
|
|
27
|
-
new MCPClient(envID: string, connection: MCPConnection | MCPConnection[], storage?: MCPStorage, rng?: MCPRNG, mcpFilter?:
|
|
27
|
+
new MCPClient(envID: string, connection: MCPConnection | MCPConnection[], storage?: MCPStorage, rng?: MCPRNG, mcpFilter?: MCPOutputFilter, executionPolicy?: MCPExecutionPolicy);
|
|
28
28
|
mcpClient.getTools(): Promise<ToolSchema[]>;
|
|
29
29
|
mcpClient.callTool(name: string, inputs: Record<string, any>, toolCallId?: string): Promise<MCPToolOutput>;
|
|
30
30
|
mcpClient.setExecuteProviderHandler(handler: (toolCallId: string, type: ProviderType, input: Record<string, any>) => Promise<{ output: Record<string, any> }>): void;
|
|
@@ -34,7 +34,9 @@ mcpClient.setExecuteProviderHandler(handler: (toolCallId: string, type: Provider
|
|
|
34
34
|
|
|
35
35
|
This is what you pass into `BaseAgent({ mcpClient, ... })`. `envID` scopes storage/RNG state per logical environment/session — pass a stable id (e.g. a user or conversation id) if you want isolated tool state per agent instance sharing a server. Accepting an array of connections lets one client fan out across multiple servers.
|
|
36
36
|
|
|
37
|
-
`mcpFilter` (an `
|
|
37
|
+
`mcpFilter` (an `MCPOutputFilter`) redacts sensitive substrings/patterns from tool output before it reaches the model — see [`MCPOutputFilter`](#mcpoutputfilter-redacting-tool-output) below.
|
|
38
|
+
|
|
39
|
+
`executionPolicy` (an `MCPExecutionPolicy`) decides whether a tool call is allowed to run at all, *before* it's dispatched — see [`MCPExecutionPolicy`](#mcpexecutionpolicy-gating-tool-calls) below.
|
|
38
40
|
|
|
39
41
|
#### Registering tools directly on the client (bypassing the connection)
|
|
40
42
|
|
|
@@ -92,15 +94,47 @@ Requires the `aliafsordeh/orbitx-sandbox:0.1` image (pull it, or build it yourse
|
|
|
92
94
|
- **`MCPStorage`** — abstract `{ get(key): Promise<string>; set(key, value): Promise<void> }`. `MCPFSStorage` is the default filesystem-backed implementation (`new MCPFSStorage(path?)`, defaults to a randomly-named folder under the OS temp directory). `MCPStorage` and `MCPFSStorage` are both exported if you want to implement your own backend (Redis, a database, etc.) or point the default one at a specific path.
|
|
93
95
|
- **`MCPRNG`** — deterministic-ish id generator backed by an `MCPStorage` instance (used internally for things like `generateRefId()`, the helper behind ref ids in `BrowserReadTool`'s output).
|
|
94
96
|
|
|
95
|
-
## `
|
|
97
|
+
## `MCPOutputFilter` — redacting tool output
|
|
96
98
|
|
|
97
99
|
```ts
|
|
98
|
-
new
|
|
100
|
+
new MCPOutputFilter(values: (string | RegExp)[]);
|
|
99
101
|
mcpFilter.filter(input: any): any; // replaces every match with "FILTERED_OUTPUT"
|
|
100
102
|
```
|
|
101
103
|
|
|
102
104
|
Pass literal strings (e.g. an API key you never want echoed back to the model) or regexes (e.g. `/sk-[a-zA-Z0-9]{20,}/`) as the `mcpFilter` argument to `MCPClient` to scrub tool output before it's returned — useful when a tool might read a file or environment variable containing a secret.
|
|
103
105
|
|
|
106
|
+
> `MCPOutputFilter` was named `MCPFilter` before. The old name is still exported as a deprecated alias (`export const MCPFilter = MCPOutputFilter`) and will be removed in `1.0.0` — switch to `MCPOutputFilter` in new code.
|
|
107
|
+
|
|
108
|
+
## `MCPExecutionPolicy` — gating tool calls
|
|
109
|
+
|
|
110
|
+
```ts
|
|
111
|
+
abstract class MCPExecutionPolicy {
|
|
112
|
+
abstract authorize(request: MCPToolCallRequest): Promise<boolean> | boolean;
|
|
113
|
+
}
|
|
114
|
+
// MCPToolCallRequest = { toolName: string; inputs: Record<string, any>; envID: string; toolCallId?: string };
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Checked by `MCPClient.callTool()` before every tool call is dispatched — whether the tool is registered locally on the client or routed across a connection to a remote `MCPServer`. Returning (or resolving to) `false` throws before the call reaches the tool, and that error surfaces to the model as a normal tool-error result (`BaseAgent`'s dispatch loop catches it the same way it catches any other `callTool()` rejection).
|
|
118
|
+
|
|
119
|
+
`MCPClient` defaults to `MCPBypassExecutionPolicy`, a built-in no-op that authorizes every call — so this is entirely opt-in. Implement your own subclass of `MCPExecutionPolicy` to add an allowlist, rate limiting, per-tool confirmation, or any other trust policy, and pass it as the `executionPolicy` argument to `MCPClient`'s constructor:
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
import { MCPClient, MCPExecutionPolicy, type MCPToolCallRequest } from "orbitx";
|
|
123
|
+
|
|
124
|
+
class AllowlistPolicy extends MCPExecutionPolicy {
|
|
125
|
+
#allowed: Set<string>;
|
|
126
|
+
constructor(allowed: string[]) {
|
|
127
|
+
super();
|
|
128
|
+
this.#allowed = new Set(allowed);
|
|
129
|
+
}
|
|
130
|
+
authorize({ toolName }: MCPToolCallRequest) {
|
|
131
|
+
return this.#allowed.has(toolName);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const mcpClient = new MCPClient(envID, connection, storage, rng, undefined, new AllowlistPolicy(["get_current_time"]));
|
|
136
|
+
```
|
|
137
|
+
|
|
104
138
|
## Custom `MCP` subclasses
|
|
105
139
|
|
|
106
140
|
Both `MCPServer` and `MCPClient` extend the abstract `MCP` class — `getStorage()`, `getRNG()`, and `executeProvider(toolCallId, type, input)`. Tool `execute` functions receive the calling `MCP` instance directly, as their 4th argument (after a `toolCallId` — see [Tools](./tools.md#the-mcptool-shape)), so a tool can reach storage/RNG scoped to whichever client dispatched the call.
|
package/docs/tools.md
CHANGED
|
@@ -75,7 +75,7 @@ Import a whole domain's tools at once (e.g. `FsTools()`), or import individual t
|
|
|
75
75
|
|
|
76
76
|
### Filesystem — `FsTools()`
|
|
77
77
|
|
|
78
|
-
> ⚠️ `FsWriteFileTool` and `FsDeleteTool` can permanently overwrite, delete, or corrupt existing files — no undo. Prefer routing filesystem access through `MCPComputer`'s sandbox (see [MCP Architecture](./mcp-architecture.md#mcpcomputer-sandboxed-execution)) to protect the host system.
|
|
78
|
+
> ⚠️ `FsWriteFileTool` and `FsDeleteTool` can permanently overwrite, delete, or corrupt existing files — no undo. Prefer routing filesystem access through `MCPComputer`'s sandbox (see [MCP Architecture](./mcp-architecture.md#mcpcomputer-sandboxed-execution)) to protect the host system, and/or gate these tools behind an `MCPExecutionPolicy` (see [`MCPExecutionPolicy`](./mcp-architecture.md#mcpexecutionpolicy-gating-tool-calls)) — e.g. denying `fs-write-file`/`fs-delete` outside an allowlisted directory, or requiring per-call confirmation.
|
|
79
79
|
|
|
80
80
|
| Tool | Purpose |
|
|
81
81
|
|---|---|
|
|
@@ -92,7 +92,7 @@ Import a whole domain's tools at once (e.g. `FsTools()`), or import individual t
|
|
|
92
92
|
|
|
93
93
|
### Bash / processes — `BashTools()`
|
|
94
94
|
|
|
95
|
-
> ⚠️ Shell commands can permanently delete files, corrupt data, modify system settings, or execute harmful operations — no undo. Same sandboxing recommendation as above.
|
|
95
|
+
> ⚠️ Shell commands can permanently delete files, corrupt data, modify system settings, or execute harmful operations — no undo. Same sandboxing recommendation as above, and the same `MCPExecutionPolicy` option — e.g. denying `bash-run` calls whose command matches a deny-list, or routing them through a human-confirmation policy.
|
|
96
96
|
|
|
97
97
|
| Tool | Purpose |
|
|
98
98
|
|---|---|
|