@nifrajs/webmcp 3.5.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 +126 -0
- package/dist/index.d.ts +219 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +692 -0
- package/dist/index.js.map +1 -0
- package/package.json +54 -0
- package/src/index.ts +1031 -0
package/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# @nifrajs/webmcp
|
|
2
|
+
|
|
3
|
+
Typed WebMCP site tools plus a deterministic predictive-UI contract for Nifra applications.
|
|
4
|
+
|
|
5
|
+
WebMCP is the browser-local surface: compatible hosts discover tools from the page through
|
|
6
|
+
`document.modelContext.registerTool`. This package does not replace WebMCP or MCP. It makes one Nifra
|
|
7
|
+
core tool contract usable from a page-local agent while adding prediction, reconciliation, receipts, and
|
|
8
|
+
host-independent conformance tests.
|
|
9
|
+
|
|
10
|
+
```sh
|
|
11
|
+
bun add @nifrajs/webmcp
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
import { t } from "@nifrajs/schema"
|
|
16
|
+
import {
|
|
17
|
+
defineAgentCapability,
|
|
18
|
+
registerWebMcpTools,
|
|
19
|
+
} from "@nifrajs/webmcp"
|
|
20
|
+
|
|
21
|
+
const addItem = defineAgentCapability({
|
|
22
|
+
name: "cart.add",
|
|
23
|
+
description: "Add a product to the current cart.",
|
|
24
|
+
input: t.object({ sku: t.string(), quantity: t.number() }),
|
|
25
|
+
output: t.object({ cartVersion: t.string() }),
|
|
26
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },
|
|
27
|
+
writes: ["cart"],
|
|
28
|
+
execute: async (input) => addItemOnTheServer(input),
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
// Safe no-op on browsers/hosts without WebMCP.
|
|
32
|
+
const registration = await registerWebMcpTools([addItem])
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The returned WebMCP `execute` function runs Nifra's existing input validation, capability, approval,
|
|
36
|
+
idempotency, budget, cancellation, output validation, and evidence path. By default it returns a bounded
|
|
37
|
+
receipt envelope so an agent can verify whether the operation committed. The normal human UI remains the
|
|
38
|
+
source of page rendering and works when WebMCP is absent.
|
|
39
|
+
|
|
40
|
+
Receipt output is retained only while its JSON encoding stays within the bounded `maxReceiptBytes`
|
|
41
|
+
limit (16 KiB by default, 64 KiB maximum); oversized or non-JSON output is represented by
|
|
42
|
+
`outputTruncated: true`. Use `resultMode: "output"` only when the embedding host provides its own
|
|
43
|
+
response-size and serialization boundary.
|
|
44
|
+
|
|
45
|
+
## Predictive UI
|
|
46
|
+
|
|
47
|
+
Predictions are application-owned and deterministic. They are not LLM guesses. Pair `predict` with
|
|
48
|
+
`reconcile`; prediction patches use an atomic, defensive subset of RFC 6902 (`add`, `replace`, `remove`):
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
const addItem = defineAgentCapability({
|
|
52
|
+
// ...typed core tool options...
|
|
53
|
+
predict: ({ input, snapshot, version }) => ({
|
|
54
|
+
baseVersion: version,
|
|
55
|
+
patch: [
|
|
56
|
+
{ op: "add", path: "/items/-", value: { sku: input.sku, quantity: input.quantity } },
|
|
57
|
+
],
|
|
58
|
+
}),
|
|
59
|
+
reconcile: ({ previous, output }) => ({
|
|
60
|
+
state: { items: previous.state.items },
|
|
61
|
+
version: output.cartVersion,
|
|
62
|
+
}),
|
|
63
|
+
})
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Use `createPredictionStore` and `executePredicted` for the full lifecycle:
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
const store = createPredictionStore({
|
|
70
|
+
state: { items: [] },
|
|
71
|
+
version: "cart-1",
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
const result = await executePredicted(addItem, input, store)
|
|
75
|
+
// committed | rolled-back | conflicted | expired | stale | invalid | executed
|
|
76
|
+
console.log(result.outcome, result.snapshot)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
The store is atomic, defensive, expiry-aware, version-aware, and rejects prototype-grafting paths.
|
|
80
|
+
Successful server state replaces the authoritative base; failed calls roll the overlay back; stale
|
|
81
|
+
commits become conflicts.
|
|
82
|
+
|
|
83
|
+
## Remote MCP and MCP Apps
|
|
84
|
+
|
|
85
|
+
The capability contains the canonical `capability.tool`. Project it into the existing MCP adapter without
|
|
86
|
+
creating a second contract:
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
import { toMcpTool } from "@nifrajs/mcp/tool-contract"
|
|
90
|
+
|
|
91
|
+
const remoteTool = toMcpTool(addItem.tool, {
|
|
92
|
+
capabilities: [addItem.tool.capability],
|
|
93
|
+
})
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Use `@nifrajs/mcp`'s existing `defineMcpTool`, `structuredContent`, `ui://` widgets, and render intents
|
|
97
|
+
when the result should render as an MCP App. WebMCP is page-local; remote MCP remains available without an
|
|
98
|
+
open page.
|
|
99
|
+
|
|
100
|
+
## Security
|
|
101
|
+
|
|
102
|
+
- Register an explicit allowlist; never expose every route, DOM event, or `fetch` call.
|
|
103
|
+
- WebMCP registration is not authorization. Enforce authorization again at the server boundary.
|
|
104
|
+
- Keep inputs narrow and annotations honest. A safety hint is not a permission.
|
|
105
|
+
- Predictions are pure local transforms and cannot grant capability or bypass core policy.
|
|
106
|
+
- Receipts contain status, bounded evidence, and error codes—not credentials, request bodies, secrets, or
|
|
107
|
+
stack traces.
|
|
108
|
+
- Normal browsers and non-WebMCP hosts receive a safe unsupported report.
|
|
109
|
+
|
|
110
|
+
## AI conformance
|
|
111
|
+
|
|
112
|
+
`runAgentSurfaceConformance` accepts an injectable host and optional deterministic calls, so CI can verify
|
|
113
|
+
the surface without ChatGPT or a live model:
|
|
114
|
+
|
|
115
|
+
```ts
|
|
116
|
+
const result = await runAgentSurfaceConformance([addItem], {
|
|
117
|
+
target: fakeWebMcpHost,
|
|
118
|
+
cases: [{ capability: addItem, input: { sku: "sku-1", quantity: 1 } }],
|
|
119
|
+
})
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
For the complete contract, see [`LLM.md`](./LLM.md), the repository [`AGENTS.md`](../../AGENTS.md), and
|
|
123
|
+
the root machine-readable [`llms-full.txt`](../../llms-full.txt) corpus.
|
|
124
|
+
|
|
125
|
+
See [`examples/webmcp`](../../examples/webmcp) for a complete capability projected to both WebMCP and
|
|
126
|
+
the existing remote MCP adapter.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nifra's typed Agent Surface contract and WebMCP adapter.
|
|
3
|
+
*
|
|
4
|
+
* WebMCP is the page-local transport: a compatible host discovers the standard
|
|
5
|
+
* `document.modelContext.registerTool` surface. Nifra adds typed core-tool
|
|
6
|
+
* execution, deterministic prediction/reconciliation, bounded receipts, and a
|
|
7
|
+
* host-independent conformance runner around that transport.
|
|
8
|
+
*/
|
|
9
|
+
import { type InferOutput, type StandardSchemaV1 } from "@nifrajs/core/schema";
|
|
10
|
+
import { type ToolApproval, type ToolCallOptions, type ToolCallResult, type ToolContract, type ToolContractOptions, type ToolError, type ToolEvidence } from "@nifrajs/core/tool-contract";
|
|
11
|
+
export type AgentSurfaceScope = "page" | "session" | "server";
|
|
12
|
+
export type ReconciliationMode = "accept-server-state" | "reload" | "manual";
|
|
13
|
+
export interface AgentSurfaceDescriptor {
|
|
14
|
+
readonly scope: AgentSurfaceScope;
|
|
15
|
+
readonly reads: readonly string[];
|
|
16
|
+
readonly writes: readonly string[];
|
|
17
|
+
readonly reconciliation: ReconciliationMode;
|
|
18
|
+
}
|
|
19
|
+
export interface AgentSurfaceSnapshot<State> {
|
|
20
|
+
readonly state: State;
|
|
21
|
+
readonly version: string;
|
|
22
|
+
}
|
|
23
|
+
/** The safe RFC 6902 subset accepted for speculative UI updates. */
|
|
24
|
+
export type PredictionPatchOperation = {
|
|
25
|
+
readonly op: "add" | "replace";
|
|
26
|
+
readonly path: string;
|
|
27
|
+
readonly value: unknown;
|
|
28
|
+
} | {
|
|
29
|
+
readonly op: "remove";
|
|
30
|
+
readonly path: string;
|
|
31
|
+
};
|
|
32
|
+
export interface AgentSurfacePrediction {
|
|
33
|
+
readonly baseVersion: string;
|
|
34
|
+
readonly patch: readonly PredictionPatchOperation[];
|
|
35
|
+
readonly expiresAt?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface AgentSurfacePredictionContext<State, Input> {
|
|
38
|
+
readonly input: Input;
|
|
39
|
+
readonly snapshot: State;
|
|
40
|
+
readonly version: string;
|
|
41
|
+
readonly now: number;
|
|
42
|
+
}
|
|
43
|
+
export interface AgentSurfaceAuthoritativeState<State> {
|
|
44
|
+
readonly state: State;
|
|
45
|
+
readonly version: string;
|
|
46
|
+
}
|
|
47
|
+
export interface AgentSurfaceReconcileContext<Input, Output, State> {
|
|
48
|
+
readonly input: Input;
|
|
49
|
+
readonly output: Output;
|
|
50
|
+
readonly previous: AgentSurfaceSnapshot<State>;
|
|
51
|
+
readonly prediction: AgentSurfacePrediction;
|
|
52
|
+
readonly now: number;
|
|
53
|
+
}
|
|
54
|
+
export type AgentSurfacePredictor<Input, State> = (context: AgentSurfacePredictionContext<State, Input>) => AgentSurfacePrediction | PromiseLike<AgentSurfacePrediction>;
|
|
55
|
+
export type AgentSurfaceReconciler<Input, Output, State> = (context: AgentSurfaceReconcileContext<Input, Output, State>) => AgentSurfaceAuthoritativeState<State> | PromiseLike<AgentSurfaceAuthoritativeState<State>>;
|
|
56
|
+
export interface AgentCapability<Input, Output, State = unknown> {
|
|
57
|
+
readonly tool: ToolContract<Input, Output>;
|
|
58
|
+
readonly surface: AgentSurfaceDescriptor;
|
|
59
|
+
readonly predict?: AgentSurfacePredictor<Input, State>;
|
|
60
|
+
readonly reconcile?: AgentSurfaceReconciler<Input, Output, State>;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The erased, read-only handle accepted by capability registries.
|
|
64
|
+
*
|
|
65
|
+
* A real application commonly registers tools with unrelated input and output types. Registry
|
|
66
|
+
* boundaries therefore use this structural view instead of pretending the whole array has one
|
|
67
|
+
* homogeneous generic type. Individual calls remain validated and typed at their capability's
|
|
68
|
+
* `tool` boundary.
|
|
69
|
+
*/
|
|
70
|
+
export type AgentCapabilityReference = {
|
|
71
|
+
readonly tool: Omit<ToolContract, "input" | "output" | "execute" | "idempotency" | "cost" | "policy"> & {
|
|
72
|
+
readonly input: StandardSchemaV1;
|
|
73
|
+
readonly output: StandardSchemaV1;
|
|
74
|
+
readonly execute: (...args: never[]) => unknown | PromiseLike<unknown>;
|
|
75
|
+
readonly idempotency?: unknown;
|
|
76
|
+
readonly cost?: unknown;
|
|
77
|
+
readonly policy?: unknown;
|
|
78
|
+
};
|
|
79
|
+
readonly surface: AgentSurfaceDescriptor;
|
|
80
|
+
};
|
|
81
|
+
export type DefineAgentCapabilityOptions<InputSchema extends StandardSchemaV1, OutputSchema extends StandardSchemaV1, State> = ToolContractOptions<InferOutput<InputSchema>, InferOutput<OutputSchema>, InputSchema, OutputSchema> & {
|
|
82
|
+
readonly scope?: AgentSurfaceScope;
|
|
83
|
+
readonly reads?: readonly string[];
|
|
84
|
+
readonly writes?: readonly string[];
|
|
85
|
+
readonly reconciliation?: ReconciliationMode;
|
|
86
|
+
readonly predict?: AgentSurfacePredictor<InferOutput<InputSchema>, State>;
|
|
87
|
+
readonly reconcile?: AgentSurfaceReconciler<InferOutput<InputSchema>, InferOutput<OutputSchema>, State>;
|
|
88
|
+
};
|
|
89
|
+
/** Create a capability from the same core tool contract used by Nifra's other adapters. */
|
|
90
|
+
export declare function defineAgentCapability<InputSchema extends StandardSchemaV1, OutputSchema extends StandardSchemaV1, State = unknown>(options: DefineAgentCapabilityOptions<InputSchema, OutputSchema, State>): AgentCapability<InferOutput<InputSchema>, InferOutput<OutputSchema>, State>;
|
|
91
|
+
export interface WebMcpToolDefinition {
|
|
92
|
+
readonly name: string;
|
|
93
|
+
readonly description: string;
|
|
94
|
+
readonly inputSchema: Record<string, unknown>;
|
|
95
|
+
readonly annotations: AgentCapability<unknown, unknown>["tool"]["annotations"];
|
|
96
|
+
readonly execute: (input: unknown) => unknown | PromiseLike<unknown>;
|
|
97
|
+
}
|
|
98
|
+
export interface WebMcpExecutionOptions extends Omit<ToolCallOptions, "signal" | "capabilities"> {
|
|
99
|
+
/** Extra capability tokens may be supplied by an embedding host; the tool's own token is always added. */
|
|
100
|
+
readonly capabilities?: readonly string[];
|
|
101
|
+
/** A page-local authorization check. Server authorization remains mandatory for remote writes. */
|
|
102
|
+
readonly authorize?: (input: unknown) => boolean | PromiseLike<boolean>;
|
|
103
|
+
/** Return the Nifra receipt envelope (default) or only the typed output on success. */
|
|
104
|
+
readonly resultMode?: "receipt" | "output";
|
|
105
|
+
/** Maximum JSON-encoded output bytes retained in the default receipt. */
|
|
106
|
+
readonly maxReceiptBytes?: number;
|
|
107
|
+
}
|
|
108
|
+
export interface WebMcpReceipt<Output = unknown> {
|
|
109
|
+
readonly ok: boolean;
|
|
110
|
+
readonly outcome: "committed" | "dry-run" | "failed" | "denied";
|
|
111
|
+
readonly dryRun: boolean;
|
|
112
|
+
readonly output?: Output;
|
|
113
|
+
readonly outputTruncated?: true;
|
|
114
|
+
readonly error?: {
|
|
115
|
+
readonly code: ToolError["code"];
|
|
116
|
+
readonly stage: ToolError["stage"];
|
|
117
|
+
};
|
|
118
|
+
readonly evidence: readonly ToolEvidence[];
|
|
119
|
+
}
|
|
120
|
+
/** Adapt one canonical capability to the proposed WebMCP tool shape. */
|
|
121
|
+
export declare function toWebMcpTool<Input, Output, State>(capability: AgentCapability<Input, Output, State>, options?: WebMcpExecutionOptions): WebMcpToolDefinition;
|
|
122
|
+
/** Execute through Nifra's existing validation, policy, approval, idempotency, and evidence path. */
|
|
123
|
+
export declare function executeAgentCapability<Input, Output, State>(capability: AgentCapability<Input, Output, State>, input: unknown, options?: ToolCallOptions): Promise<ToolCallResult<Output>>;
|
|
124
|
+
export interface WebMcpModelContext {
|
|
125
|
+
readonly registerTool: (tool: WebMcpToolDefinition) => void | PromiseLike<void>;
|
|
126
|
+
readonly unregisterTool?: (name: string) => void | PromiseLike<void>;
|
|
127
|
+
}
|
|
128
|
+
export interface WebMcpTarget {
|
|
129
|
+
readonly modelContext?: WebMcpModelContext;
|
|
130
|
+
}
|
|
131
|
+
export interface WebMcpRegistrationFailure {
|
|
132
|
+
readonly name: string;
|
|
133
|
+
readonly error: string;
|
|
134
|
+
}
|
|
135
|
+
export interface WebMcpRegistrationReport {
|
|
136
|
+
readonly supported: boolean;
|
|
137
|
+
readonly registered: readonly string[];
|
|
138
|
+
readonly failed: readonly WebMcpRegistrationFailure[];
|
|
139
|
+
readonly cleanup: () => Promise<void>;
|
|
140
|
+
}
|
|
141
|
+
/** Register an explicit allowlist of capabilities, safely degrading on ordinary browsers. */
|
|
142
|
+
export declare function registerWebMcpTools(capabilities: readonly AgentCapabilityReference[], target?: WebMcpTarget | undefined, options?: WebMcpExecutionOptions): Promise<WebMcpRegistrationReport>;
|
|
143
|
+
export interface PredictionStoreSnapshot<State> extends AgentSurfaceSnapshot<State> {
|
|
144
|
+
readonly authoritativeVersion: string;
|
|
145
|
+
readonly activePredictionIds: readonly string[];
|
|
146
|
+
}
|
|
147
|
+
export type PredictionStoreEvent<State> = {
|
|
148
|
+
readonly type: "predicted";
|
|
149
|
+
readonly predictionId: string;
|
|
150
|
+
readonly snapshot: PredictionStoreSnapshot<State>;
|
|
151
|
+
} | {
|
|
152
|
+
readonly type: "committed";
|
|
153
|
+
readonly predictionId: string;
|
|
154
|
+
readonly snapshot: PredictionStoreSnapshot<State>;
|
|
155
|
+
} | {
|
|
156
|
+
readonly type: "rolled-back";
|
|
157
|
+
readonly predictionId: string;
|
|
158
|
+
readonly snapshot: PredictionStoreSnapshot<State>;
|
|
159
|
+
} | {
|
|
160
|
+
readonly type: "conflicted";
|
|
161
|
+
readonly predictionId: string;
|
|
162
|
+
readonly snapshot: PredictionStoreSnapshot<State>;
|
|
163
|
+
} | {
|
|
164
|
+
readonly type: "expired";
|
|
165
|
+
readonly predictionId: string;
|
|
166
|
+
readonly snapshot: PredictionStoreSnapshot<State>;
|
|
167
|
+
};
|
|
168
|
+
export type PredictionStoreResult<State> = {
|
|
169
|
+
readonly outcome: "predicted" | "committed" | "rolled-back" | "conflicted" | "expired" | "stale" | "invalid" | "missing";
|
|
170
|
+
readonly predictionId: string;
|
|
171
|
+
readonly snapshot: PredictionStoreSnapshot<State>;
|
|
172
|
+
};
|
|
173
|
+
export interface PredictionStore<State> {
|
|
174
|
+
readonly snapshot: () => PredictionStoreSnapshot<State>;
|
|
175
|
+
readonly predict: (predictionId: string, prediction: AgentSurfacePrediction, now?: number) => PredictionStoreResult<State>;
|
|
176
|
+
readonly commit: (predictionId: string, authoritative: AgentSurfaceAuthoritativeState<State>, now?: number) => PredictionStoreResult<State>;
|
|
177
|
+
readonly rollback: (predictionId: string) => PredictionStoreResult<State>;
|
|
178
|
+
readonly expire: (now?: number) => readonly string[];
|
|
179
|
+
readonly subscribe: (listener: (event: PredictionStoreEvent<State>) => void) => () => void;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* An atomic, defensive prediction store. Predictions are overlays over authoritative state; a server
|
|
183
|
+
* commit replaces the base and remaining overlays are replayed or conflict-dropped.
|
|
184
|
+
*/
|
|
185
|
+
export declare function createPredictionStore<State>(initial: AgentSurfaceAuthoritativeState<State>): PredictionStore<State>;
|
|
186
|
+
export interface PredictedExecutionResult<Output, State> {
|
|
187
|
+
readonly outcome: "committed" | "rolled-back" | "conflicted" | "expired" | "stale" | "invalid" | "executed";
|
|
188
|
+
readonly predictionId?: string;
|
|
189
|
+
readonly prediction?: AgentSurfacePrediction;
|
|
190
|
+
readonly tool?: ToolCallResult<Output>;
|
|
191
|
+
readonly snapshot: PredictionStoreSnapshot<State>;
|
|
192
|
+
}
|
|
193
|
+
export interface ExecutePredictedOptions extends Omit<ToolCallOptions, "capabilities"> {
|
|
194
|
+
readonly capabilities?: readonly string[];
|
|
195
|
+
readonly predictionId?: string;
|
|
196
|
+
readonly now?: () => number;
|
|
197
|
+
}
|
|
198
|
+
/** Apply a pure prediction, execute the core tool, then commit or roll it back atomically. */
|
|
199
|
+
export declare function executePredicted<Input, Output, State>(capability: AgentCapability<Input, Output, State>, input: unknown, store: PredictionStore<State>, options?: ExecutePredictedOptions): Promise<PredictedExecutionResult<Output, State>>;
|
|
200
|
+
export interface AgentSurfaceConformanceCase {
|
|
201
|
+
readonly capability: AgentCapabilityReference;
|
|
202
|
+
readonly input: unknown;
|
|
203
|
+
readonly assert?: (result: unknown) => void | PromiseLike<void>;
|
|
204
|
+
}
|
|
205
|
+
export interface AgentSurfaceConformanceOptions {
|
|
206
|
+
readonly target?: WebMcpTarget;
|
|
207
|
+
readonly registration?: WebMcpExecutionOptions;
|
|
208
|
+
readonly cases?: readonly AgentSurfaceConformanceCase[];
|
|
209
|
+
}
|
|
210
|
+
export interface AgentSurfaceConformanceResult {
|
|
211
|
+
readonly supported: boolean;
|
|
212
|
+
readonly registered: readonly string[];
|
|
213
|
+
readonly failed: readonly WebMcpRegistrationFailure[];
|
|
214
|
+
readonly checks: readonly string[];
|
|
215
|
+
}
|
|
216
|
+
/** Run deterministic host-independent checks over the WebMCP projection and optional calls. */
|
|
217
|
+
export declare function runAgentSurfaceConformance(capabilities: readonly AgentCapabilityReference[], options?: AgentSurfaceConformanceOptions): Promise<AgentSurfaceConformanceResult>;
|
|
218
|
+
export type { ToolApproval, ToolCallOptions, ToolCallResult, ToolContract, ToolContractOptions, ToolError, ToolEvidence, };
|
|
219
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|