@mcp-b/webmcp-ts-sdk 1.2.0 → 1.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 CHANGED
@@ -8,7 +8,7 @@
8
8
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue?style=flat-square)](https://www.typescriptlang.org/)
9
9
  [![Minimal Code](https://img.shields.io/badge/Custom_Code-~50_lines-green?style=flat-square)](https://github.com/WebMCP-org/npm-packages)
10
10
 
11
- 📖 **[Full Documentation](https://docs.mcp-b.ai/packages/webmcp-ts-sdk)** | 🚀 **[Quick Start](https://docs.mcp-b.ai/quickstart)**
11
+ **[Full Documentation](https://docs.mcp-b.ai/packages/webmcp-ts-sdk)** | **[Quick Start](https://docs.mcp-b.ai/quickstart)**
12
12
 
13
13
  **@mcp-b/webmcp-ts-sdk** adapts the official MCP TypeScript SDK for browser environments, enabling dynamic tool registration required by the W3C Web Model Context API. This allows AI agents like Claude, ChatGPT, Gemini, Cursor, and Copilot to interact with browser-based applications.
14
14
 
@@ -185,10 +185,10 @@ server.registerTool('analyze-data', {
185
185
 
186
186
  This package is designed for **minimal maintenance**:
187
187
 
188
- - **~50 lines** of custom code
189
- - **Automatic updates** for types, protocol, validation via official SDK dependency
190
- - **Single modification point** - only capability registration behavior
191
- - **Type-safe** - no prototype hacks or unsafe casts
188
+ - **~50 lines** of custom code
189
+ - **Automatic updates** for types, protocol, validation via official SDK dependency
190
+ - **Single modification point** - only capability registration behavior
191
+ - **Type-safe** - no prototype hacks or unsafe casts
192
192
 
193
193
  ### Syncing with Upstream
194
194
 
package/dist/index.d.ts CHANGED
@@ -1,36 +1,146 @@
1
1
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
- import { Server, ServerOptions } from "@modelcontextprotocol/sdk/server/index.js";
3
- import { RequestOptions, mergeCapabilities } from "@modelcontextprotocol/sdk/shared/protocol.js";
2
+ import { RequestOptions, RequestOptions as RequestOptions$1, mergeCapabilities } from "@modelcontextprotocol/sdk/shared/protocol.js";
4
3
  import { ReadBuffer, serializeMessage } from "@modelcontextprotocol/sdk/shared/stdio.js";
5
- import { CallToolRequest, CallToolRequestSchema, CallToolResult, CallToolResultSchema, ClientCapabilities, ClientNotification, ClientRequest, ClientResult, CreateMessageRequest, CreateMessageRequestSchema, CreateMessageResult, CreateMessageResultSchema, ElicitRequest, ElicitRequestSchema, ElicitResult, ElicitResultSchema, ErrorCode, GetPromptRequest, GetPromptRequestSchema, GetPromptResult, GetPromptResultSchema, Implementation, Implementation as Implementation$1, InitializeRequest, InitializeRequestSchema, InitializeResult, InitializeResultSchema, JSONRPCMessage, JSONRPCMessageSchema, LATEST_PROTOCOL_VERSION, ListPromptsRequest, ListPromptsRequestSchema, ListPromptsResult, ListPromptsResultSchema, ListResourcesRequest, ListResourcesRequestSchema, ListResourcesResult, ListResourcesResultSchema, ListToolsRequest, ListToolsRequestSchema, ListToolsResult, ListToolsResultSchema, LoggingLevel, LoggingLevelSchema, LoggingMessageNotification, McpError, Notification, Prompt, PromptMessage, ReadResourceRequest, ReadResourceRequestSchema, ReadResourceResult, ReadResourceResultSchema, Request, Resource, ResourceContents, ResourceListChangedNotificationSchema, ResourceTemplate, Result, SUPPORTED_PROTOCOL_VERSIONS, ServerCapabilities, ServerNotification, ServerRequest, ServerResult, Tool, ToolAnnotations, ToolListChangedNotificationSchema } from "@modelcontextprotocol/sdk/types.js";
6
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
4
  import { Transport, Transport as Transport$1, TransportSendOptions } from "@modelcontextprotocol/sdk/shared/transport.js";
5
+ import { CallToolRequest, CallToolRequestSchema, CallToolResult, CallToolResultSchema, ClientCapabilities, ClientNotification, ClientRequest, ClientResult, CreateMessageRequest, CreateMessageRequest as CreateMessageRequest$1, CreateMessageRequestSchema, CreateMessageResult, CreateMessageResult as CreateMessageResult$1, CreateMessageResultSchema, ElicitRequest, ElicitRequest as ElicitRequest$1, ElicitRequestSchema, ElicitResult, ElicitResult as ElicitResult$1, ElicitResultSchema, ErrorCode, GetPromptRequest, GetPromptRequestSchema, GetPromptResult, GetPromptResultSchema, Implementation, Implementation as Implementation$1, InitializeRequest, InitializeRequestSchema, InitializeResult, InitializeResultSchema, JSONRPCMessage, JSONRPCMessageSchema, LATEST_PROTOCOL_VERSION, ListPromptsRequest, ListPromptsRequestSchema, ListPromptsResult, ListPromptsResultSchema, ListResourcesRequest, ListResourcesRequestSchema, ListResourcesResult, ListResourcesResultSchema, ListToolsRequest, ListToolsRequestSchema, ListToolsResult, ListToolsResultSchema, LoggingLevel, LoggingLevelSchema, LoggingMessageNotification, McpError, Notification, Prompt, PromptMessage, PromptMessage as PromptMessage$1, ReadResourceRequest, ReadResourceRequestSchema, ReadResourceResult, ReadResourceResultSchema, Request, Resource, ResourceContents, ResourceListChangedNotificationSchema, ResourceTemplate, Result, SUPPORTED_PROTOCOL_VERSIONS, ServerCapabilities, ServerNotification, ServerRequest, ServerResult, Tool, ToolAnnotations, ToolListChangedNotificationSchema } from "@modelcontextprotocol/sdk/types.js";
6
+ import { InputSchema, ModelContextCore, ModelContextOptions, ResourceContents as ResourceContents$1, ToolDescriptor, ToolListItem, ToolResponse } from "@mcp-b/webmcp-types";
7
+ import { ServerOptions } from "@modelcontextprotocol/sdk/server/index.js";
8
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
9
 
9
10
  //#region src/browser-server.d.ts
10
-
11
+ interface BrowserMcpServerOptions extends ServerOptions {
12
+ native?: ModelContextCore;
13
+ }
11
14
  /**
12
- * Browser-optimized MCP Server for Web Model Context API (navigator.modelContext).
15
+ * Browser-optimized MCP Server that speaks WebMCP natively.
13
16
  *
14
- * This class extends McpServer to support dynamic registration of tools, resources,
15
- * and prompts after transport connection, which is required for the Web Model Context API
16
- * where items are registered via navigator.modelContext.provideContext() at any time.
17
+ * This server IS navigator.modelContext it implements the WebMCP standard API
18
+ * (provideContext, registerTool, unregisterTool, clearContext) while retaining
19
+ * full MCP protocol capabilities (resources, prompts, elicitation, sampling)
20
+ * via the inherited BaseMcpServer surface.
17
21
  *
18
- * Key differences from base McpServer:
19
- * - Pre-registers tool, resource, and prompt capabilities before connection
20
- * - Allows items to be registered after transport is connected
21
- * - Uses no-op JSON Schema validator to avoid ajv errors in browser environments
22
- * - Designed for browser environments where items arrive asynchronously
22
+ * When `native` is provided, all tool operations are mirrored to it so that
23
+ * navigator.modelContextTesting (polyfill testing shim) stays in sync.
23
24
  */
24
25
  declare class BrowserMcpServer extends McpServer {
25
- constructor(serverInfo: Implementation$1, options?: ServerOptions);
26
+ private native;
27
+ private _promptSchemas;
28
+ private _jsonValidator;
29
+ private _publicMethodsBound;
30
+ constructor(serverInfo: Implementation$1, options?: BrowserMcpServerOptions);
26
31
  /**
27
- * Override connect to ensure request handlers are initialized
28
- * BEFORE the transport connection is established.
32
+ * navigator.modelContext consumers may destructure methods (e.g. const { registerTool } = ...).
33
+ * Bind methods once so they remain callable outside instance-method invocation syntax.
34
+ */
35
+ private bindPublicApiMethods;
36
+ private get _parentTools();
37
+ private get _parentResources();
38
+ private get _parentPrompts();
39
+ private toTransportSchema;
40
+ private isZodSchema;
41
+ private getNativeToolsApi;
42
+ private registerToolInServer;
43
+ backfillTools(tools: readonly ToolListItem[], execute: (name: string, args: Record<string, unknown>) => Promise<ToolResponse>): number;
44
+ registerTool(tool: ToolDescriptor): {
45
+ unregister: () => void;
46
+ };
47
+ /**
48
+ * Backfill tools that were already registered on the native/polyfill context
49
+ * before this BrowserMcpServer wrapper was installed.
50
+ */
51
+ syncNativeTools(): number;
52
+ unregisterTool(name: string): void;
53
+ registerResource(descriptor: {
54
+ uri: string;
55
+ name: string;
56
+ description?: string;
57
+ mimeType?: string;
58
+ read: (uri: URL, params?: Record<string, string>) => Promise<{
59
+ contents: ResourceContents$1[];
60
+ }>;
61
+ }): {
62
+ unregister: () => void;
63
+ };
64
+ registerPrompt(descriptor: {
65
+ name: string;
66
+ description?: string;
67
+ argsSchema?: InputSchema;
68
+ get: (args: Record<string, unknown>) => Promise<{
69
+ messages: PromptMessage$1[];
70
+ }>;
71
+ }): {
72
+ unregister: () => void;
73
+ };
74
+ provideContext(options?: ModelContextOptions): void;
75
+ clearContext(): void;
76
+ listResources(): Array<{
77
+ uri: string;
78
+ name: string;
79
+ description?: string;
80
+ mimeType?: string;
81
+ }>;
82
+ readResource(uri: string): Promise<{
83
+ contents: ResourceContents$1[];
84
+ }>;
85
+ listPrompts(): Array<{
86
+ name: string;
87
+ description?: string;
88
+ arguments?: Array<{
89
+ name: string;
90
+ description?: string;
91
+ required?: boolean;
92
+ }>;
93
+ }>;
94
+ getPrompt(name: string, args?: Record<string, unknown>): Promise<{
95
+ messages: PromptMessage$1[];
96
+ }>;
97
+ listTools(): ToolListItem[];
98
+ /**
99
+ * Override SDK's validateToolInput to handle both Zod schemas and plain JSON Schema.
100
+ * Zod schemas use the SDK's safeParseAsync; plain JSON Schema uses PolyfillJsonSchemaValidator.
101
+ */
102
+ validateToolInput(tool: {
103
+ inputSchema?: unknown;
104
+ }, args: Record<string, unknown> | undefined, toolName: string): Promise<Record<string, unknown> | undefined>;
105
+ /**
106
+ * Override SDK's validateToolOutput to handle both Zod schemas and plain JSON Schema.
107
+ */
108
+ validateToolOutput(tool: {
109
+ outputSchema?: unknown;
110
+ }, result: unknown, toolName: string): Promise<void>;
111
+ callTool(params: {
112
+ name: string;
113
+ arguments?: Record<string, unknown>;
114
+ }): Promise<ToolResponse>;
115
+ executeTool(name: string, args?: Record<string, unknown>): Promise<ToolResponse>;
116
+ /**
117
+ * Override connect to initialize request handlers BEFORE the transport connection.
118
+ * This prevents "Cannot register capabilities after connecting to transport" errors
119
+ * when tools are registered dynamically after connection.
29
120
  *
30
- * This prevents the "Cannot register capabilities after connecting to transport"
31
- * error when items are registered dynamically after connection.
121
+ * After the parent sets up its Zod-based handlers, we replace the ones that break
122
+ * with plain JSON Schema objects (ListTools, ListPrompts, GetPrompt).
32
123
  */
33
124
  connect(transport: Transport$1): Promise<void>;
125
+ createMessage(params: CreateMessageRequest$1['params'], options?: RequestOptions$1): Promise<CreateMessageResult$1>;
126
+ elicitInput(params: ElicitRequest$1['params'], options?: RequestOptions$1): Promise<ElicitResult$1>;
127
+ }
128
+ interface ResourceDescriptor {
129
+ uri: string;
130
+ name: string;
131
+ description?: string;
132
+ mimeType?: string;
133
+ read: (uri: URL, params?: Record<string, string>) => Promise<{
134
+ contents: ResourceContents$1[];
135
+ }>;
136
+ }
137
+ interface PromptDescriptor {
138
+ name: string;
139
+ description?: string;
140
+ argsSchema?: InputSchema;
141
+ get: (args: Record<string, unknown>) => Promise<{
142
+ messages: PromptMessage$1[];
143
+ }>;
34
144
  }
35
145
  //#endregion
36
146
  //#region src/no-op-validator.d.ts
@@ -49,13 +159,13 @@ declare class BrowserMcpServer extends McpServer {
49
159
  * Interface for JSON Schema validators.
50
160
  * This matches the MCP SDK's jsonSchemaValidator interface.
51
161
  */
52
- interface JsonSchemaValidator {
53
- getValidator<T>(schema: unknown): (input: unknown) => JsonSchemaValidatorResult<T>;
162
+ interface JsonSchemaValidator$1 {
163
+ getValidator<T>(schema: unknown): (input: unknown) => JsonSchemaValidatorResult$1<T>;
54
164
  }
55
165
  /**
56
166
  * Result type for JSON Schema validation
57
167
  */
58
- type JsonSchemaValidatorResult<T> = {
168
+ type JsonSchemaValidatorResult$1<T> = {
59
169
  valid: true;
60
170
  data: T;
61
171
  errorMessage: undefined;
@@ -83,7 +193,7 @@ type JsonSchemaValidatorResult<T> = {
83
193
  * );
84
194
  * ```
85
195
  */
86
- declare class NoOpJsonSchemaValidator implements JsonSchemaValidator {
196
+ declare class NoOpJsonSchemaValidator implements JsonSchemaValidator$1 {
87
197
  /**
88
198
  * Returns a validator function that always passes.
89
199
  * The input data is passed through unchanged.
@@ -91,8 +201,29 @@ declare class NoOpJsonSchemaValidator implements JsonSchemaValidator {
91
201
  * @param _schema - The JSON Schema (ignored)
92
202
  * @returns A validator function that always returns valid
93
203
  */
94
- getValidator<T>(_schema: unknown): (input: unknown) => JsonSchemaValidatorResult<T>;
204
+ getValidator<T>(_schema: unknown): (input: unknown) => JsonSchemaValidatorResult$1<T>;
95
205
  }
96
206
  //#endregion
97
- export { BrowserMcpServer, BrowserMcpServer as McpServer, type CallToolRequest, CallToolRequestSchema, type CallToolResult, CallToolResultSchema, Client, type ClientCapabilities, type ClientNotification, type ClientRequest, type ClientResult, type CreateMessageRequest, CreateMessageRequestSchema, type CreateMessageResult, CreateMessageResultSchema, type ElicitRequest, ElicitRequestSchema, type ElicitResult, ElicitResultSchema, ErrorCode, type GetPromptRequest, GetPromptRequestSchema, type GetPromptResult, GetPromptResultSchema, type Implementation, type InitializeRequest, InitializeRequestSchema, type InitializeResult, InitializeResultSchema, type JSONRPCMessage, JSONRPCMessageSchema, LATEST_PROTOCOL_VERSION, type ListPromptsRequest, ListPromptsRequestSchema, type ListPromptsResult, ListPromptsResultSchema, type ListResourcesRequest, ListResourcesRequestSchema, type ListResourcesResult, ListResourcesResultSchema, type ListToolsRequest, ListToolsRequestSchema, type ListToolsResult, ListToolsResultSchema, type LoggingLevel, LoggingLevelSchema, type LoggingMessageNotification, type McpError, NoOpJsonSchemaValidator, type Notification, type Prompt, type PromptMessage, ReadBuffer, type ReadResourceRequest, ReadResourceRequestSchema, type ReadResourceResult, ReadResourceResultSchema, type Request, type RequestOptions, type Resource, type ResourceContents, ResourceListChangedNotificationSchema, type ResourceTemplate, type Result, SUPPORTED_PROTOCOL_VERSIONS, Server, type ServerCapabilities, type ServerNotification, type ServerRequest, type ServerResult, type Tool, type ToolAnnotations, ToolListChangedNotificationSchema, type Transport, type TransportSendOptions, mergeCapabilities, serializeMessage };
207
+ //#region src/polyfill-validator.d.ts
208
+ interface JsonSchemaValidator {
209
+ getValidator<T>(schema: unknown): (input: unknown) => JsonSchemaValidatorResult<T>;
210
+ }
211
+ type JsonSchemaValidatorResult<T> = {
212
+ valid: true;
213
+ data: T;
214
+ errorMessage: undefined;
215
+ } | {
216
+ valid: false;
217
+ data: undefined;
218
+ errorMessage: string;
219
+ };
220
+ declare class PolyfillJsonSchemaValidator implements JsonSchemaValidator {
221
+ getValidator<T>(schema: unknown): (input: unknown) => JsonSchemaValidatorResult<T>;
222
+ }
223
+ //#endregion
224
+ //#region src/index.d.ts
225
+ type SamplingRequestParams = CreateMessageRequest$1['params'];
226
+ type SamplingResult = CreateMessageResult$1;
227
+ //#endregion
228
+ export { BrowserMcpServer, BrowserMcpServer as McpServer, type BrowserMcpServerOptions, type CallToolRequest, CallToolRequestSchema, type CallToolResult, CallToolResultSchema, Client, type ClientCapabilities, type ClientNotification, type ClientRequest, type ClientResult, type CreateMessageRequest, CreateMessageRequestSchema, type CreateMessageResult, CreateMessageResultSchema, type ElicitRequest, ElicitRequestSchema, type ElicitResult, ElicitResultSchema, ErrorCode, type GetPromptRequest, GetPromptRequestSchema, type GetPromptResult, GetPromptResultSchema, type Implementation, type InitializeRequest, InitializeRequestSchema, type InitializeResult, InitializeResultSchema, type JSONRPCMessage, JSONRPCMessageSchema, LATEST_PROTOCOL_VERSION, type ListPromptsRequest, ListPromptsRequestSchema, type ListPromptsResult, ListPromptsResultSchema, type ListResourcesRequest, ListResourcesRequestSchema, type ListResourcesResult, ListResourcesResultSchema, type ListToolsRequest, ListToolsRequestSchema, type ListToolsResult, ListToolsResultSchema, type LoggingLevel, LoggingLevelSchema, type LoggingMessageNotification, type McpError, NoOpJsonSchemaValidator, type Notification, PolyfillJsonSchemaValidator, type Prompt, type PromptDescriptor, type PromptMessage, ReadBuffer, type ReadResourceRequest, ReadResourceRequestSchema, type ReadResourceResult, ReadResourceResultSchema, type Request, type RequestOptions, type Resource, type ResourceContents, type ResourceDescriptor, ResourceListChangedNotificationSchema, type ResourceTemplate, type Result, SUPPORTED_PROTOCOL_VERSIONS, SamplingRequestParams, SamplingResult, type ServerCapabilities, type ServerNotification, type ServerRequest, type ServerResult, type Tool, type ToolAnnotations, ToolListChangedNotificationSchema, type Transport, type TransportSendOptions, mergeCapabilities, serializeMessage };
98
229
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/browser-server.ts","../src/no-op-validator.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;AAoBA;;;;;;;;cAAa,gBAAA,SAAyB,SAAA;0BACZ,4BAA0B;ECL1C;AACuE;AA6BjF;;;;;qBDDoC,cAAY;;;;;;;;;;;;;AAzBhD;;;;;;UCJU,mBAAA,CDIyC;wDCHK,0BAA0B;;;;AAAD;AA6BjF,KAvBK,yBAuBgC,CAAA,CAAA,CAAA,GAAA;EAQ8C,KAAA,EAAA,IAAA;EAA1B,IAAA,EA9BhC,CA8BgC;EART,YAAA,EAAA,SAAA;CAAmB,GAAA;;;;;;;;;;;;;;;;;;;;;;;;cAAtD,uBAAA,YAAmC;;;;;;;;yDAQS,0BAA0B"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/browser-server.ts","../src/no-op-validator.ts","../src/polyfill-validator.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}