@mcp-native/core 0.4.0 → 0.6.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 +56 -21
- package/dist/index.d.ts +70 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +342 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -71,25 +71,29 @@ await runtime.dispatch({
|
|
|
71
71
|
|
|
72
72
|
## Public API
|
|
73
73
|
|
|
74
|
-
| Export
|
|
75
|
-
|
|
|
76
|
-
| `McpNativeRuntime`
|
|
77
|
-
| `McpClient`
|
|
78
|
-
| `McpTool`, `McpListToolsResult`, `McpResource`, `McpReadResourceResult`, `McpToolCallResult`
|
|
79
|
-
| `McpContent` and its discriminated content interfaces
|
|
80
|
-
| `McpAnnotations`, `McpToolAnnotations`, `McpIcon`, `McpCacheScope`
|
|
81
|
-
| `ToolAction`, `McpNativeAction`
|
|
82
|
-
| `McpNativeRuntimeOptions`, `McpNativeActionPolicy`
|
|
83
|
-
| `createAllowlistActionPolicy`, `McpNativeToolAllowlistEntry`
|
|
84
|
-
| `
|
|
85
|
-
| `
|
|
86
|
-
| `
|
|
87
|
-
| `
|
|
88
|
-
| `
|
|
89
|
-
| `
|
|
90
|
-
| `
|
|
91
|
-
| `
|
|
92
|
-
| `
|
|
74
|
+
| Export | Purpose |
|
|
75
|
+
| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
|
|
76
|
+
| `McpNativeRuntime` | Delegates tool listing, tool calls, resource reads, and declared actions to an `McpClient`. |
|
|
77
|
+
| `McpClient` | Minimal interface implemented by an SDK- or transport-specific adapter. |
|
|
78
|
+
| `McpTool`, `McpListToolsResult`, `McpResource`, `McpReadResourceResult`, `McpToolCallResult` | Transport-neutral MCP data contracts used by the runtime. |
|
|
79
|
+
| `McpContent` and its discriminated content interfaces | Exact text, image, audio, resource-link, and embedded-resource shapes. |
|
|
80
|
+
| `McpAnnotations`, `McpToolAnnotations`, `McpIcon`, `McpCacheScope` | Official metadata, presentation hints, and response-cache contracts. |
|
|
81
|
+
| `ToolAction`, `McpNativeAction` | Declarative actions that can be dispatched through the runtime. |
|
|
82
|
+
| `McpNativeRuntimeOptions`, `McpNativeActionPolicy` | Host policy controlling which validated surface actions `dispatch()` may execute. |
|
|
83
|
+
| `createAllowlistActionPolicy`, `McpNativeToolAllowlistEntry` | Fail-closed helper that authorizes tools by name and exact or predicated arguments. |
|
|
84
|
+
| `createConsentActionPolicy`, `McpNativeToolConsentEntry`, `McpNativeToolConsentRequest` | Core `dispatch()` consent over explicit risk, capability, and privacy descriptors. |
|
|
85
|
+
| `McpNativeToolRisk`, `McpNativeToolConsentReviewer` | Closed risk vocabulary and exact-boolean host review callback. |
|
|
86
|
+
| `createExpiringGrantActionPolicy`, `revokeMcpNativeConsentGrant` | Bounded persistent grants around any action policy, with explicit revocation. |
|
|
87
|
+
| `McpNativeConsentGrantStore`, `McpNativeConsentGrantRecord` | Host-owned durable grant storage contract and validated record. |
|
|
88
|
+
| `McpNativeActionDeniedError` | Fail-closed error for actions not explicitly allowed by the host. |
|
|
89
|
+
| `parseMcpNativeAction`, `parseJsonObject`, `parseJsonValue` | Strict validators that return safely reconstructed untrusted data. |
|
|
90
|
+
| `JsonValidationOptions` | Optional cumulative string/key budget for one reconstructed JSON graph. |
|
|
91
|
+
| `JSON_MAX_DEPTH`, `JSON_MAX_VALUES`, `JSON_MAX_STRING_LENGTH`, `JSON_MAX_TOTAL_STRING_CODE_UNITS` | Fixed complexity limits and a shared protocol-facing cumulative string/key budget. |
|
|
92
|
+
| `JsonValidationError` | Error for non-JSON, circular, non-plain, or non-finite input. |
|
|
93
|
+
| `JsonPrimitive`, `JsonValue`, `JsonObject` | JSON-safe value types for untrusted protocol data. |
|
|
94
|
+
| `McpExtensionSettings`, `McpExtensionNegotiation` | Validated extension maps and explicit negotiation outcomes. |
|
|
95
|
+
| `parseMcpExtensionSettings`, `isMcpExtensionIdentifier` | Fail-closed validation for prefixed extension declarations. |
|
|
96
|
+
| `negotiateMcpExtension` | Computes mutual support from client and server declarations only. |
|
|
93
97
|
|
|
94
98
|
## Extension negotiation
|
|
95
99
|
|
|
@@ -107,6 +111,36 @@ const result = negotiateMcpExtension(
|
|
|
107
111
|
|
|
108
112
|
Only the two explicit maps participate. Metadata, MIME types, and tool results cannot grant support. `McpNativeRuntime.negotiateExtension()` reads both maps from the optional `McpClient.getClientExtensionSettings()` and `getServerExtensionSettings()` boundary, so callers cannot substitute an unadvertised client map, and returns a typed fallback result when either side is absent.
|
|
109
113
|
|
|
114
|
+
## Per-action consent review
|
|
115
|
+
|
|
116
|
+
Use `createConsentActionPolicy()` when a core `McpNativeRuntime.dispatch()` action needs an explicit user decision rather than a static allowlist:
|
|
117
|
+
|
|
118
|
+
```ts
|
|
119
|
+
import { McpNativeRuntime, createConsentActionPolicy } from "@mcp-native/core";
|
|
120
|
+
|
|
121
|
+
const runtime = new McpNativeRuntime(client, {
|
|
122
|
+
actionPolicy: createConsentActionPolicy(
|
|
123
|
+
[
|
|
124
|
+
{
|
|
125
|
+
name: "share_location",
|
|
126
|
+
risk: "external-write",
|
|
127
|
+
authorizeArguments: (arguments_) => arguments_?.precision === "city",
|
|
128
|
+
capabilities: ["device.location"],
|
|
129
|
+
sensitiveData: ["user.location"],
|
|
130
|
+
sharesDataExternally: true,
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
async (request) => presentLocalizedConsentSheet(request),
|
|
134
|
+
),
|
|
135
|
+
});
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Profiles and their identifiers are host-authored. Every profile must explicitly provide `capabilities`, `sensitiveData`, and `sharesDataExternally`; use empty arrays or `false` only after the host has classified that dimension. Map identifiers to app-owned localized copy; do not display server tool names, descriptions, annotations, arguments, or metadata as trusted consent claims. Unknown tools and arguments are denied without prompting, the reviewer must return an exact boolean, and concurrent evaluations are denied instead of accumulating consent dialogs. Approval applies to one dispatch only.
|
|
139
|
+
|
|
140
|
+
Wrap the policy with `createExpiringGrantActionPolicy()` when the host offers remembered approval. Its app-owned grant key must bind the policy revision, server/account partition, tool, and argument class. Stored records are validated, expired records are removed, evaluation is serialized, and a grant is saved only after exact approval. Set a zero duration for allow-once and call `revokeMcpNativeConsentGrant()` from the host's user-visible revoke, logout, server-removal, and policy-migration paths.
|
|
141
|
+
|
|
142
|
+
`actionPolicy` protects `McpNativeRuntime.dispatch()`. Set `trustedToolPolicy` to protect direct `callTool()` operations with the same or another explicit policy; omission preserves the lower-level trusted seam. MCP Apps requires its own `authorizeToolCall` callback and A2UI v1 delivery requires `createA2uiV1ActionDeliveryHandler`, because those packages own different protocol boundaries.
|
|
143
|
+
|
|
110
144
|
## Pre-1.0 MCP result migration
|
|
111
145
|
|
|
112
146
|
The initial `0.0.x` proof of concept returned one `McpResource` directly from `readResource`. The official SDK returns a content collection, so implementations now return `McpReadResourceResult`:
|
|
@@ -140,8 +174,9 @@ Content blocks now use MCP's official discriminated fields. Replace `{ type: "te
|
|
|
140
174
|
- No transport or official MCP SDK dependency.
|
|
141
175
|
- No remote code loading or execution.
|
|
142
176
|
- Surface-driven `dispatch()` is denied unless the host's action policy explicitly allows it.
|
|
143
|
-
- Direct `callTool()` is a lower-level
|
|
144
|
-
- Prefer `createAllowlistActionPolicy()` so
|
|
177
|
+
- Direct `callTool()` is a lower-level trusted seam by default. Set `trustedToolPolicy` when it must receive explicit policy review.
|
|
178
|
+
- Prefer `createAllowlistActionPolicy()` so authorization covers tool arguments, not only tool names.
|
|
179
|
+
- Use `createConsentActionPolicy()` for explicit review; it never treats server annotations as risk classification. Add the bounded grant wrapper only for host-authored, expiring, revocable persistence.
|
|
145
180
|
- Untrusted JSON is reconstructed without prototype mutation and rejects cycles, non-plain objects, non-finite numbers, excessive depth, excessive value counts, and oversized strings or object keys.
|
|
146
181
|
- Declared actions reject fields outside the exact `{ type, name, arguments? }` contract.
|
|
147
182
|
- Extension declarations require prefixed identifiers and JSON-object settings; server metadata never activates an extension.
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export declare const JSON_MAX_DEPTH = 64;
|
|
|
9
9
|
export declare const JSON_MAX_VALUES = 10000;
|
|
10
10
|
/** Maximum UTF-16 code units accepted in one JSON string. */
|
|
11
11
|
export declare const JSON_MAX_STRING_LENGTH = 65536;
|
|
12
|
+
/** Shared protocol-facing cumulative UTF-16 code-unit budget for strings and object keys. */
|
|
13
|
+
export declare const JSON_MAX_TOTAL_STRING_CODE_UNITS = 1048576;
|
|
12
14
|
/** Thrown when an untrusted value cannot be represented as JSON data. */
|
|
13
15
|
export declare class JsonValidationError extends TypeError {
|
|
14
16
|
constructor(message: string);
|
|
@@ -177,6 +179,63 @@ export type McpNativeAction = ToolAction;
|
|
|
177
179
|
export declare function parseMcpNativeAction(value: unknown, path?: string): McpNativeAction;
|
|
178
180
|
/** A host-owned policy deciding which validated tool actions may execute. */
|
|
179
181
|
export type McpNativeActionPolicy = (action: McpNativeAction) => boolean | Promise<boolean>;
|
|
182
|
+
/** Host-owned effect classification used when presenting one tool-action consent decision. */
|
|
183
|
+
export type McpNativeToolRisk = "read-only" | "local-write" | "external-write" | "destructive";
|
|
184
|
+
/**
|
|
185
|
+
* A host-authored consent profile for one exact tool/argument match.
|
|
186
|
+
*
|
|
187
|
+
* Capability and sensitive-data identifiers are opaque, app-owned keys. A host should map them to
|
|
188
|
+
* localized user-facing copy instead of displaying the identifiers or server-provided metadata.
|
|
189
|
+
*/
|
|
190
|
+
export type McpNativeToolConsentEntry = McpNativeToolAllowlistEntry & {
|
|
191
|
+
readonly risk: McpNativeToolRisk;
|
|
192
|
+
/** Explicit app-owned capability identifiers; use an empty array only after review. */
|
|
193
|
+
readonly capabilities: readonly string[];
|
|
194
|
+
/** Explicit app-owned sensitive-data identifiers; use an empty array only after review. */
|
|
195
|
+
readonly sensitiveData: readonly string[];
|
|
196
|
+
/** Must explicitly state whether the action sends any user or device data outside the app. */
|
|
197
|
+
readonly sharesDataExternally: boolean;
|
|
198
|
+
};
|
|
199
|
+
/** Immutable input supplied for every matching surface-driven action. */
|
|
200
|
+
export interface McpNativeToolConsentRequest {
|
|
201
|
+
readonly action: McpNativeAction;
|
|
202
|
+
readonly risk: McpNativeToolRisk;
|
|
203
|
+
readonly capabilities: readonly string[];
|
|
204
|
+
readonly sensitiveData: readonly string[];
|
|
205
|
+
readonly sharesDataExternally: boolean;
|
|
206
|
+
}
|
|
207
|
+
/** A host-owned user-decision callback. Only an exact boolean `true` authorizes execution. */
|
|
208
|
+
export type McpNativeToolConsentReviewer = (request: McpNativeToolConsentRequest) => boolean | Promise<boolean>;
|
|
209
|
+
export interface McpNativeConsentGrantRecord {
|
|
210
|
+
readonly key: string;
|
|
211
|
+
readonly expiresAt: number;
|
|
212
|
+
}
|
|
213
|
+
/** Host-owned durable storage for non-secret consent grants. */
|
|
214
|
+
export interface McpNativeConsentGrantStore {
|
|
215
|
+
load(key: string): unknown | Promise<unknown>;
|
|
216
|
+
save(record: McpNativeConsentGrantRecord): void | Promise<void>;
|
|
217
|
+
remove(key: string): void | Promise<void>;
|
|
218
|
+
}
|
|
219
|
+
export interface McpNativeExpiringGrantPolicyOptions {
|
|
220
|
+
/** Per-action approval used when no unexpired grant exists. */
|
|
221
|
+
readonly authorize: McpNativeActionPolicy;
|
|
222
|
+
/** Host-authored key binding the grant to app policy revision, server, tool, and argument class. */
|
|
223
|
+
readonly grantKey: (action: McpNativeAction) => string | undefined | Promise<string | undefined>;
|
|
224
|
+
/** Host-selected lifetime after a fresh approval. Zero means allow once without persistence. */
|
|
225
|
+
readonly grantDurationMs: (action: McpNativeAction) => number | Promise<number>;
|
|
226
|
+
readonly store: McpNativeConsentGrantStore;
|
|
227
|
+
readonly now?: () => number;
|
|
228
|
+
readonly maxGrantDurationMs?: number;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Wraps a per-action policy with bounded, expiring, host-keyed grants.
|
|
232
|
+
*
|
|
233
|
+
* Persisted values are treated as untrusted. Reviews and store operations are serialized, expired
|
|
234
|
+
* grants are removed, and a grant is saved only after exact approval. Revoke a grant at any time
|
|
235
|
+
* through `revokeMcpNativeConsentGrant`.
|
|
236
|
+
*/
|
|
237
|
+
export declare function createExpiringGrantActionPolicy(options: McpNativeExpiringGrantPolicyOptions): McpNativeActionPolicy;
|
|
238
|
+
export declare function revokeMcpNativeConsentGrant(store: McpNativeConsentGrantStore, key: string): Promise<void>;
|
|
180
239
|
/**
|
|
181
240
|
* An allowlist entry that authorizes a tool by name and either exact arguments
|
|
182
241
|
* or a host-provided argument predicate. Name-only allowlists are intentionally
|
|
@@ -197,6 +256,15 @@ export type McpNativeToolAllowlistEntry = {
|
|
|
197
256
|
};
|
|
198
257
|
/** Builds a fail-closed action policy from an explicit tool/argument allowlist. */
|
|
199
258
|
export declare function createAllowlistActionPolicy(allowlist: readonly McpNativeToolAllowlistEntry[]): McpNativeActionPolicy;
|
|
259
|
+
/**
|
|
260
|
+
* Builds a fail-closed, per-dispatch consent policy from host-authored risk profiles.
|
|
261
|
+
*
|
|
262
|
+
* The first matching entry is reviewed. Unknown tools and arguments are denied without prompting,
|
|
263
|
+
* concurrent evaluations are denied instead of queuing dialogs, and no approval is retained. A
|
|
264
|
+
* server's tool annotations are intentionally absent from this boundary because they are untrusted
|
|
265
|
+
* hints rather than capability or consent grants.
|
|
266
|
+
*/
|
|
267
|
+
export declare function createConsentActionPolicy(entries: readonly McpNativeToolConsentEntry[], review: McpNativeToolConsentReviewer): McpNativeActionPolicy;
|
|
200
268
|
export interface McpNativeRuntimeOptions {
|
|
201
269
|
/**
|
|
202
270
|
* Authorizes surface-driven actions through `dispatch()` only. When omitted,
|
|
@@ -204,6 +272,8 @@ export interface McpNativeRuntimeOptions {
|
|
|
204
272
|
* `callTool()` directly after JSON argument validation.
|
|
205
273
|
*/
|
|
206
274
|
readonly actionPolicy?: McpNativeActionPolicy;
|
|
275
|
+
/** Optional policy for host-initiated `callTool()` calls. Omission preserves the trusted seam. */
|
|
276
|
+
readonly trustedToolPolicy?: McpNativeActionPolicy;
|
|
207
277
|
}
|
|
208
278
|
export declare class McpNativeActionDeniedError extends Error {
|
|
209
279
|
readonly toolName: string;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,SAAS,EAAE,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,sFAAsF;AACtF,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,2DAA2D;AAC3D,eAAO,MAAM,eAAe,QAAS,CAAC;AACtC,6DAA6D;AAC7D,eAAO,MAAM,sBAAsB,QAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,8 @@ export const JSON_MAX_DEPTH = 64;
|
|
|
4
4
|
export const JSON_MAX_VALUES = 10_000;
|
|
5
5
|
/** Maximum UTF-16 code units accepted in one JSON string. */
|
|
6
6
|
export const JSON_MAX_STRING_LENGTH = 65_536;
|
|
7
|
+
/** Shared protocol-facing cumulative UTF-16 code-unit budget for strings and object keys. */
|
|
8
|
+
export const JSON_MAX_TOTAL_STRING_CODE_UNITS = 1_048_576;
|
|
7
9
|
/** Thrown when an untrusted value cannot be represented as JSON data. */
|
|
8
10
|
export class JsonValidationError extends TypeError {
|
|
9
11
|
constructor(message) {
|
|
@@ -98,6 +100,122 @@ export function parseMcpNativeAction(value, path = "action") {
|
|
|
98
100
|
: { arguments: parseJsonObject(action.arguments, `${path}.arguments`) }),
|
|
99
101
|
};
|
|
100
102
|
}
|
|
103
|
+
const MCP_NATIVE_MAX_GRANT_KEY_CODE_UNITS = 512;
|
|
104
|
+
const MCP_NATIVE_MAX_GRANT_DURATION_MS = 31 * 24 * 60 * 60 * 1_000;
|
|
105
|
+
const consentGrantOperations = new WeakMap();
|
|
106
|
+
/**
|
|
107
|
+
* Wraps a per-action policy with bounded, expiring, host-keyed grants.
|
|
108
|
+
*
|
|
109
|
+
* Persisted values are treated as untrusted. Reviews and store operations are serialized, expired
|
|
110
|
+
* grants are removed, and a grant is saved only after exact approval. Revoke a grant at any time
|
|
111
|
+
* through `revokeMcpNativeConsentGrant`.
|
|
112
|
+
*/
|
|
113
|
+
export function createExpiringGrantActionPolicy(options) {
|
|
114
|
+
if (options === null ||
|
|
115
|
+
typeof options !== "object" ||
|
|
116
|
+
typeof options.authorize !== "function" ||
|
|
117
|
+
typeof options.grantKey !== "function" ||
|
|
118
|
+
typeof options.grantDurationMs !== "function" ||
|
|
119
|
+
options.store === null ||
|
|
120
|
+
typeof options.store !== "object" ||
|
|
121
|
+
typeof options.store.load !== "function" ||
|
|
122
|
+
typeof options.store.save !== "function" ||
|
|
123
|
+
typeof options.store.remove !== "function" ||
|
|
124
|
+
(options.now !== undefined && typeof options.now !== "function")) {
|
|
125
|
+
throw new JsonValidationError("Expected valid expiring consent-grant callbacks");
|
|
126
|
+
}
|
|
127
|
+
const now = options.now ?? Date.now;
|
|
128
|
+
const maxDuration = options.maxGrantDurationMs ?? MCP_NATIVE_MAX_GRANT_DURATION_MS;
|
|
129
|
+
if (!Number.isSafeInteger(maxDuration) ||
|
|
130
|
+
maxDuration < 1 ||
|
|
131
|
+
maxDuration > MCP_NATIVE_MAX_GRANT_DURATION_MS) {
|
|
132
|
+
throw new JsonValidationError(`Expected maximum consent-grant duration from 1 to ${MCP_NATIVE_MAX_GRANT_DURATION_MS}`);
|
|
133
|
+
}
|
|
134
|
+
let evaluationRunning = false;
|
|
135
|
+
return async (input) => {
|
|
136
|
+
if (evaluationRunning)
|
|
137
|
+
return false;
|
|
138
|
+
evaluationRunning = true;
|
|
139
|
+
try {
|
|
140
|
+
const keyAction = parseFrozenAction(input, "grant key action");
|
|
141
|
+
const authorizationAction = parseFrozenAction(input, "grant authorization action");
|
|
142
|
+
const durationAction = parseFrozenAction(input, "grant duration action");
|
|
143
|
+
const key = parseGrantKey(await options.grantKey(keyAction));
|
|
144
|
+
const evaluate = async () => {
|
|
145
|
+
const currentTime = now();
|
|
146
|
+
if (!Number.isSafeInteger(currentTime) || currentTime < 0) {
|
|
147
|
+
throw new JsonValidationError("Consent-grant clock must return a non-negative integer");
|
|
148
|
+
}
|
|
149
|
+
if (key !== undefined) {
|
|
150
|
+
const stored = await options.store.load(key);
|
|
151
|
+
if (stored !== undefined) {
|
|
152
|
+
const grant = parseConsentGrantRecord(stored, key);
|
|
153
|
+
if (grant.expiresAt - currentTime > maxDuration) {
|
|
154
|
+
throw new JsonValidationError("Stored consent-grant lifetime exceeds the configured maximum");
|
|
155
|
+
}
|
|
156
|
+
if (grant.expiresAt > currentTime)
|
|
157
|
+
return true;
|
|
158
|
+
await options.store.remove(key);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const approved = await options.authorize(authorizationAction);
|
|
162
|
+
if (approved !== true && approved !== false) {
|
|
163
|
+
throw new JsonValidationError("Consent-grant authorization policy must return a boolean");
|
|
164
|
+
}
|
|
165
|
+
if (!approved)
|
|
166
|
+
return false;
|
|
167
|
+
const duration = await options.grantDurationMs(durationAction);
|
|
168
|
+
if (!Number.isSafeInteger(duration) || duration < 0 || duration > maxDuration) {
|
|
169
|
+
throw new JsonValidationError(`Consent-grant duration must be an integer from 0 to ${maxDuration}`);
|
|
170
|
+
}
|
|
171
|
+
if (key !== undefined && duration > 0) {
|
|
172
|
+
const approvedAt = now();
|
|
173
|
+
if (!Number.isSafeInteger(approvedAt) || approvedAt < 0) {
|
|
174
|
+
throw new JsonValidationError("Consent-grant clock must return a non-negative integer");
|
|
175
|
+
}
|
|
176
|
+
const expiresAt = approvedAt + duration;
|
|
177
|
+
if (!Number.isSafeInteger(expiresAt)) {
|
|
178
|
+
throw new JsonValidationError("Consent-grant expiry exceeds the safe integer range");
|
|
179
|
+
}
|
|
180
|
+
await options.store.save(Object.freeze({ key, expiresAt }));
|
|
181
|
+
}
|
|
182
|
+
return true;
|
|
183
|
+
};
|
|
184
|
+
return key === undefined
|
|
185
|
+
? await evaluate()
|
|
186
|
+
: await serializeConsentGrantOperation(options.store, key, evaluate);
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
evaluationRunning = false;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
export async function revokeMcpNativeConsentGrant(store, key) {
|
|
194
|
+
if (store === null || typeof store !== "object" || typeof store.remove !== "function") {
|
|
195
|
+
throw new JsonValidationError("Expected a consent-grant store");
|
|
196
|
+
}
|
|
197
|
+
const parsedKey = parseGrantKey(key);
|
|
198
|
+
if (parsedKey === undefined) {
|
|
199
|
+
throw new JsonValidationError("Expected a consent-grant key");
|
|
200
|
+
}
|
|
201
|
+
await serializeConsentGrantOperation(store, parsedKey, () => store.remove(parsedKey));
|
|
202
|
+
}
|
|
203
|
+
function serializeConsentGrantOperation(store, key, operation) {
|
|
204
|
+
let operations = consentGrantOperations.get(store);
|
|
205
|
+
if (operations === undefined) {
|
|
206
|
+
operations = new Map();
|
|
207
|
+
consentGrantOperations.set(store, operations);
|
|
208
|
+
}
|
|
209
|
+
const previous = operations.get(key) ?? Promise.resolve();
|
|
210
|
+
const result = previous.then(operation, operation);
|
|
211
|
+
const tail = result.then(() => undefined, () => undefined);
|
|
212
|
+
operations.set(key, tail);
|
|
213
|
+
void tail.then(() => {
|
|
214
|
+
if (operations?.get(key) === tail)
|
|
215
|
+
operations.delete(key);
|
|
216
|
+
});
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
101
219
|
/** Builds a fail-closed action policy from an explicit tool/argument allowlist. */
|
|
102
220
|
export function createAllowlistActionPolicy(allowlist) {
|
|
103
221
|
const entries = allowlist.map((entry) => {
|
|
@@ -141,6 +259,141 @@ export function createAllowlistActionPolicy(allowlist) {
|
|
|
141
259
|
return false;
|
|
142
260
|
};
|
|
143
261
|
}
|
|
262
|
+
const MCP_NATIVE_CONSENT_RISKS = new Set([
|
|
263
|
+
"read-only",
|
|
264
|
+
"local-write",
|
|
265
|
+
"external-write",
|
|
266
|
+
"destructive",
|
|
267
|
+
]);
|
|
268
|
+
const MCP_NATIVE_MAX_CONSENT_ENTRIES = 1_024;
|
|
269
|
+
const MCP_NATIVE_MAX_CONSENT_LABELS = 64;
|
|
270
|
+
const MCP_NATIVE_MAX_CONSENT_LABEL_CODE_UNITS = 128;
|
|
271
|
+
/**
|
|
272
|
+
* Builds a fail-closed, per-dispatch consent policy from host-authored risk profiles.
|
|
273
|
+
*
|
|
274
|
+
* The first matching entry is reviewed. Unknown tools and arguments are denied without prompting,
|
|
275
|
+
* concurrent evaluations are denied instead of queuing dialogs, and no approval is retained. A
|
|
276
|
+
* server's tool annotations are intentionally absent from this boundary because they are untrusted
|
|
277
|
+
* hints rather than capability or consent grants.
|
|
278
|
+
*/
|
|
279
|
+
export function createConsentActionPolicy(entries, review) {
|
|
280
|
+
if (!Array.isArray(entries) || entries.length > MCP_NATIVE_MAX_CONSENT_ENTRIES) {
|
|
281
|
+
throw new JsonValidationError(`Expected at most ${MCP_NATIVE_MAX_CONSENT_ENTRIES} tool consent entries`);
|
|
282
|
+
}
|
|
283
|
+
if (typeof review !== "function") {
|
|
284
|
+
throw new JsonValidationError("Expected tool consent reviewer to be a function");
|
|
285
|
+
}
|
|
286
|
+
const profiles = entries.map((entry, index) => {
|
|
287
|
+
const profile = expectPlainObject(entry, `consent[${index}]`);
|
|
288
|
+
expectOnlyKeys(profile, [
|
|
289
|
+
"arguments",
|
|
290
|
+
"authorizeArguments",
|
|
291
|
+
"capabilities",
|
|
292
|
+
"name",
|
|
293
|
+
"risk",
|
|
294
|
+
"sensitiveData",
|
|
295
|
+
"sharesDataExternally",
|
|
296
|
+
], `consent[${index}]`);
|
|
297
|
+
for (const field of ["capabilities", "name", "risk", "sensitiveData", "sharesDataExternally"]) {
|
|
298
|
+
if (!Object.hasOwn(profile, field)) {
|
|
299
|
+
throw new JsonValidationError(`Missing required field ${JSON.stringify(field)} at consent[${index}]`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
const hasAuthorizeArguments = Object.hasOwn(profile, "authorizeArguments");
|
|
303
|
+
const hasArguments = Object.hasOwn(profile, "arguments");
|
|
304
|
+
if (hasAuthorizeArguments && hasArguments) {
|
|
305
|
+
throw new JsonValidationError(`Tool consent entry at consent[${index}] cannot declare both arguments and authorizeArguments`);
|
|
306
|
+
}
|
|
307
|
+
if (typeof entry.name !== "string" || entry.name.length === 0) {
|
|
308
|
+
throw new JsonValidationError(`Expected a non-empty tool name at consent[${index}]`);
|
|
309
|
+
}
|
|
310
|
+
if (entry.name.length > JSON_MAX_STRING_LENGTH) {
|
|
311
|
+
throw new JsonValidationError(`Tool name at consent[${index}] exceeds maximum length of ${JSON_MAX_STRING_LENGTH}`);
|
|
312
|
+
}
|
|
313
|
+
if (!MCP_NATIVE_CONSENT_RISKS.has(entry.risk)) {
|
|
314
|
+
throw new JsonValidationError(`Unsupported tool risk at consent[${index}]`);
|
|
315
|
+
}
|
|
316
|
+
if (typeof entry.sharesDataExternally !== "boolean") {
|
|
317
|
+
throw new JsonValidationError(`Expected sharesDataExternally to be a boolean at consent[${index}]`);
|
|
318
|
+
}
|
|
319
|
+
const matcher = hasAuthorizeArguments
|
|
320
|
+
? (() => {
|
|
321
|
+
if (typeof entry.authorizeArguments !== "function") {
|
|
322
|
+
throw new JsonValidationError(`Expected authorizeArguments to be a function for tool ${entry.name}`);
|
|
323
|
+
}
|
|
324
|
+
return { authorizeArguments: entry.authorizeArguments };
|
|
325
|
+
})()
|
|
326
|
+
: {
|
|
327
|
+
arguments: !hasArguments || entry.arguments === undefined
|
|
328
|
+
? undefined
|
|
329
|
+
: parseJsonObject(entry.arguments, `consent[${index}].arguments`),
|
|
330
|
+
};
|
|
331
|
+
return Object.freeze({
|
|
332
|
+
name: entry.name,
|
|
333
|
+
...matcher,
|
|
334
|
+
risk: entry.risk,
|
|
335
|
+
capabilities: parseConsentLabels(entry.capabilities, `consent[${index}].capabilities`),
|
|
336
|
+
sensitiveData: parseConsentLabels(entry.sensitiveData, `consent[${index}].sensitiveData`),
|
|
337
|
+
sharesDataExternally: entry.sharesDataExternally,
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
let evaluationRunning = false;
|
|
341
|
+
return async (action) => {
|
|
342
|
+
if (evaluationRunning) {
|
|
343
|
+
return false;
|
|
344
|
+
}
|
|
345
|
+
evaluationRunning = true;
|
|
346
|
+
try {
|
|
347
|
+
for (const profile of profiles) {
|
|
348
|
+
if (profile.name !== action.name) {
|
|
349
|
+
continue;
|
|
350
|
+
}
|
|
351
|
+
let matches;
|
|
352
|
+
if ("authorizeArguments" in profile) {
|
|
353
|
+
const predicateArguments = action.arguments === undefined
|
|
354
|
+
? undefined
|
|
355
|
+
: parseJsonObject(action.arguments, "consent predicate arguments");
|
|
356
|
+
// Predicates run sequentially to preserve deterministic, first-match review behavior.
|
|
357
|
+
// eslint-disable-next-line no-await-in-loop -- intentional fail-closed short-circuit
|
|
358
|
+
const decision = await profile.authorizeArguments(predicateArguments);
|
|
359
|
+
if (decision !== true && decision !== false) {
|
|
360
|
+
throw new JsonValidationError(`authorizeArguments for tool ${profile.name} must return a boolean`);
|
|
361
|
+
}
|
|
362
|
+
matches = decision;
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
matches = jsonArgumentsMatch(profile.arguments, action.arguments);
|
|
366
|
+
}
|
|
367
|
+
if (!matches) {
|
|
368
|
+
continue;
|
|
369
|
+
}
|
|
370
|
+
const parsedReviewAction = parseMcpNativeAction(action, "consent action");
|
|
371
|
+
if (parsedReviewAction.arguments !== undefined) {
|
|
372
|
+
freezeJsonValue(parsedReviewAction.arguments);
|
|
373
|
+
}
|
|
374
|
+
const reviewAction = Object.freeze(parsedReviewAction);
|
|
375
|
+
const request = Object.freeze({
|
|
376
|
+
action: reviewAction,
|
|
377
|
+
risk: profile.risk,
|
|
378
|
+
capabilities: profile.capabilities,
|
|
379
|
+
sensitiveData: profile.sensitiveData,
|
|
380
|
+
sharesDataExternally: profile.sharesDataExternally,
|
|
381
|
+
});
|
|
382
|
+
// Reviews are intentionally serialized with the first matching profile.
|
|
383
|
+
// eslint-disable-next-line no-await-in-loop -- consent prompts must never race
|
|
384
|
+
const decision = await review(request);
|
|
385
|
+
if (decision !== true && decision !== false) {
|
|
386
|
+
throw new JsonValidationError("Tool consent reviewer must return a boolean");
|
|
387
|
+
}
|
|
388
|
+
return decision;
|
|
389
|
+
}
|
|
390
|
+
return false;
|
|
391
|
+
}
|
|
392
|
+
finally {
|
|
393
|
+
evaluationRunning = false;
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
}
|
|
144
397
|
export class McpNativeActionDeniedError extends Error {
|
|
145
398
|
toolName;
|
|
146
399
|
constructor(toolName) {
|
|
@@ -157,9 +410,15 @@ export class McpNativeActionDeniedError extends Error {
|
|
|
157
410
|
export class McpNativeRuntime {
|
|
158
411
|
#client;
|
|
159
412
|
#actionPolicy;
|
|
413
|
+
#trustedToolPolicy;
|
|
160
414
|
constructor(client, options = {}) {
|
|
415
|
+
if ((options.actionPolicy !== undefined && typeof options.actionPolicy !== "function") ||
|
|
416
|
+
(options.trustedToolPolicy !== undefined && typeof options.trustedToolPolicy !== "function")) {
|
|
417
|
+
throw new JsonValidationError("Runtime action policies must be functions");
|
|
418
|
+
}
|
|
161
419
|
this.#client = client;
|
|
162
420
|
this.#actionPolicy = options.actionPolicy;
|
|
421
|
+
this.#trustedToolPolicy = options.trustedToolPolicy;
|
|
163
422
|
}
|
|
164
423
|
listTools() {
|
|
165
424
|
return this.#client.listTools();
|
|
@@ -170,6 +429,12 @@ export class McpNativeRuntime {
|
|
|
170
429
|
name,
|
|
171
430
|
arguments: arguments_,
|
|
172
431
|
});
|
|
432
|
+
if (this.#trustedToolPolicy !== undefined) {
|
|
433
|
+
const allowed = await this.#trustedToolPolicy(validatedAction);
|
|
434
|
+
if (allowed !== true) {
|
|
435
|
+
throw new McpNativeActionDeniedError(validatedAction.name);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
173
438
|
return this.#client.callTool(validatedAction.name, validatedAction.arguments ?? {});
|
|
174
439
|
}
|
|
175
440
|
readResource(uri) {
|
|
@@ -196,6 +461,43 @@ export class McpNativeRuntime {
|
|
|
196
461
|
return this.#client.callTool(validatedAction.name, validatedAction.arguments ?? {});
|
|
197
462
|
}
|
|
198
463
|
}
|
|
464
|
+
function parseGrantKey(value) {
|
|
465
|
+
if (value === undefined)
|
|
466
|
+
return undefined;
|
|
467
|
+
if (typeof value !== "string" ||
|
|
468
|
+
value.length === 0 ||
|
|
469
|
+
value.length > MCP_NATIVE_MAX_GRANT_KEY_CODE_UNITS ||
|
|
470
|
+
containsControlCodeUnit(value)) {
|
|
471
|
+
throw new JsonValidationError(`Consent-grant key must contain 1 to ${MCP_NATIVE_MAX_GRANT_KEY_CODE_UNITS} non-control code units`);
|
|
472
|
+
}
|
|
473
|
+
return value;
|
|
474
|
+
}
|
|
475
|
+
function containsControlCodeUnit(value) {
|
|
476
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
477
|
+
const code = value.charCodeAt(index);
|
|
478
|
+
if (code <= 0x1f || code === 0x7f)
|
|
479
|
+
return true;
|
|
480
|
+
}
|
|
481
|
+
return false;
|
|
482
|
+
}
|
|
483
|
+
function parseFrozenAction(value, path) {
|
|
484
|
+
const action = parseMcpNativeAction(value, path);
|
|
485
|
+
if (action.arguments !== undefined)
|
|
486
|
+
freezeJsonValue(action.arguments);
|
|
487
|
+
return Object.freeze(action);
|
|
488
|
+
}
|
|
489
|
+
function parseConsentGrantRecord(value, expectedKey) {
|
|
490
|
+
const record = expectPlainObject(value, "stored consent grant");
|
|
491
|
+
expectOnlyKeys(record, ["expiresAt", "key"], "stored consent grant");
|
|
492
|
+
const key = parseGrantKey(record.key);
|
|
493
|
+
if (key !== expectedKey) {
|
|
494
|
+
throw new JsonValidationError("Stored consent-grant key does not match its lookup key");
|
|
495
|
+
}
|
|
496
|
+
if (!Number.isSafeInteger(record.expiresAt) || record.expiresAt < 0) {
|
|
497
|
+
throw new JsonValidationError("Stored consent-grant expiry must be a non-negative integer");
|
|
498
|
+
}
|
|
499
|
+
return Object.freeze({ key, expiresAt: record.expiresAt });
|
|
500
|
+
}
|
|
199
501
|
function jsonArgumentsMatch(expected, actual) {
|
|
200
502
|
if (expected === undefined) {
|
|
201
503
|
return actual === undefined || Object.keys(actual).length === 0;
|
|
@@ -205,6 +507,30 @@ function jsonArgumentsMatch(expected, actual) {
|
|
|
205
507
|
}
|
|
206
508
|
return jsonValuesEqual(expected, actual);
|
|
207
509
|
}
|
|
510
|
+
function parseConsentLabels(value, path) {
|
|
511
|
+
if (!Array.isArray(value)) {
|
|
512
|
+
throw new JsonValidationError(`Expected an array of consent identifiers at ${path}`);
|
|
513
|
+
}
|
|
514
|
+
if (value.length > MCP_NATIVE_MAX_CONSENT_LABELS) {
|
|
515
|
+
throw new JsonValidationError(`Expected at most ${MCP_NATIVE_MAX_CONSENT_LABELS} consent identifiers at ${path}`);
|
|
516
|
+
}
|
|
517
|
+
const result = [];
|
|
518
|
+
const seen = new Set();
|
|
519
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
520
|
+
const label = value[index];
|
|
521
|
+
if (typeof label !== "string" ||
|
|
522
|
+
label.length === 0 ||
|
|
523
|
+
label.length > MCP_NATIVE_MAX_CONSENT_LABEL_CODE_UNITS) {
|
|
524
|
+
throw new JsonValidationError(`Expected a non-empty consent identifier of at most ${MCP_NATIVE_MAX_CONSENT_LABEL_CODE_UNITS} code units at ${path}[${index}]`);
|
|
525
|
+
}
|
|
526
|
+
if (seen.has(label)) {
|
|
527
|
+
throw new JsonValidationError(`Duplicate consent identifier ${JSON.stringify(label)} at ${path}`);
|
|
528
|
+
}
|
|
529
|
+
seen.add(label);
|
|
530
|
+
result.push(label);
|
|
531
|
+
}
|
|
532
|
+
return Object.freeze(result);
|
|
533
|
+
}
|
|
208
534
|
function jsonValuesEqual(left, right) {
|
|
209
535
|
if (left === right) {
|
|
210
536
|
return true;
|
|
@@ -233,6 +559,22 @@ function jsonValuesEqual(left, right) {
|
|
|
233
559
|
}
|
|
234
560
|
return leftKeys.every((key) => Object.hasOwn(rightObject, key) && jsonValuesEqual(leftObject[key], rightObject[key]));
|
|
235
561
|
}
|
|
562
|
+
function freezeJsonValue(value) {
|
|
563
|
+
if (value === null || typeof value !== "object") {
|
|
564
|
+
return;
|
|
565
|
+
}
|
|
566
|
+
if (Array.isArray(value)) {
|
|
567
|
+
for (const child of value) {
|
|
568
|
+
freezeJsonValue(child);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
else {
|
|
572
|
+
for (const child of Object.values(value)) {
|
|
573
|
+
freezeJsonValue(child);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
Object.freeze(value);
|
|
577
|
+
}
|
|
236
578
|
function expectPlainObject(value, path) {
|
|
237
579
|
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
238
580
|
throw new JsonValidationError(`Expected an object at ${path}`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|