agents 0.0.78 → 0.0.80
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/ai-chat-agent.js +4 -2
- package/dist/ai-chat-agent.js.map +1 -1
- package/dist/ai-react.d.ts +12 -0
- package/dist/{chunk-Q5ZBHY4Z.js → chunk-25YDMV4H.js} +21 -13
- package/dist/chunk-25YDMV4H.js.map +1 -0
- package/dist/chunk-D6UOOELW.js +106 -0
- package/dist/chunk-D6UOOELW.js.map +1 -0
- package/dist/chunk-RN4SNE73.js +133 -0
- package/dist/chunk-RN4SNE73.js.map +1 -0
- package/dist/{chunk-5W7ZWKOP.js → chunk-YFPCCSZO.js} +212 -42
- package/dist/chunk-YFPCCSZO.js.map +1 -0
- package/dist/client.d.ts +7 -0
- package/dist/client.js +7 -126
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +58 -5
- package/dist/index.js +4 -2
- package/dist/mcp/client.d.ts +15 -9
- package/dist/mcp/client.js +1 -1
- package/dist/mcp/do-oauth-client-provider.js +3 -102
- package/dist/mcp/do-oauth-client-provider.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.js +23 -15
- package/dist/mcp/index.js.map +1 -1
- package/dist/react.d.ts +14 -0
- package/dist/react.js +4 -0
- package/dist/react.js.map +1 -1
- package/package.json +8 -6
- package/src/index.ts +296 -4
- package/dist/chunk-5W7ZWKOP.js.map +0 -1
- package/dist/chunk-Q5ZBHY4Z.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Server, Connection, PartyServerOptions } from "partyserver";
|
|
2
2
|
export { Connection, ConnectionContext, WSMessage } from "partyserver";
|
|
3
3
|
import { MCPClientManager } from "./mcp/client.js";
|
|
4
|
+
import { Tool, Prompt, Resource } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
4
6
|
import "zod";
|
|
5
|
-
import "@modelcontextprotocol/sdk/types.js";
|
|
6
|
-
import "@modelcontextprotocol/sdk/client/index.js";
|
|
7
7
|
import "@modelcontextprotocol/sdk/client/sse.js";
|
|
8
8
|
import "./mcp/do-oauth-client-provider.js";
|
|
9
9
|
import "@modelcontextprotocol/sdk/client/auth.js";
|
|
@@ -103,6 +103,27 @@ type Schedule<T = string> = {
|
|
|
103
103
|
cron: string;
|
|
104
104
|
}
|
|
105
105
|
);
|
|
106
|
+
/**
|
|
107
|
+
* MCP Server state update message from server -> Client
|
|
108
|
+
*/
|
|
109
|
+
type MCPServerMessage = {
|
|
110
|
+
type: "cf_agent_mcp_servers";
|
|
111
|
+
mcp: MCPServersState;
|
|
112
|
+
};
|
|
113
|
+
type MCPServersState = {
|
|
114
|
+
servers: {
|
|
115
|
+
[id: string]: MCPServer;
|
|
116
|
+
};
|
|
117
|
+
tools: Tool[];
|
|
118
|
+
prompts: Prompt[];
|
|
119
|
+
resources: Resource[];
|
|
120
|
+
};
|
|
121
|
+
type MCPServer = {
|
|
122
|
+
name: string;
|
|
123
|
+
server_url: string;
|
|
124
|
+
auth_url: string | null;
|
|
125
|
+
state: "authenticating" | "connecting" | "ready" | "discovering" | "failed";
|
|
126
|
+
};
|
|
106
127
|
declare function getCurrentAgent<
|
|
107
128
|
T extends Agent<unknown, unknown> = Agent<unknown, unknown>,
|
|
108
129
|
>(): {
|
|
@@ -209,14 +230,43 @@ declare class Agent<Env, State = unknown> extends Server<Env> {
|
|
|
209
230
|
*/
|
|
210
231
|
cancelSchedule(id: string): Promise<boolean>;
|
|
211
232
|
/**
|
|
212
|
-
* Method called when an alarm fires
|
|
213
|
-
* Executes any scheduled tasks that are due
|
|
233
|
+
* Method called when an alarm fires.
|
|
234
|
+
* Executes any scheduled tasks that are due.
|
|
235
|
+
*
|
|
236
|
+
* @remarks
|
|
237
|
+
* To schedule a task, please use the `this.schedule` method instead.
|
|
238
|
+
* See {@link https://developers.cloudflare.com/agents/api-reference/schedule-tasks/}
|
|
214
239
|
*/
|
|
215
|
-
alarm()
|
|
240
|
+
readonly alarm: () => Promise<void>;
|
|
216
241
|
/**
|
|
217
242
|
* Destroy the Agent, removing all state and scheduled tasks
|
|
218
243
|
*/
|
|
219
244
|
destroy(): Promise<void>;
|
|
245
|
+
/**
|
|
246
|
+
* Connect to a new MCP Server
|
|
247
|
+
*
|
|
248
|
+
* @param url MCP Server SSE URL
|
|
249
|
+
* @param callbackHost Base host for the agent, used for the redirect URI.
|
|
250
|
+
* @param agentsPrefix agents routing prefix if not using `agents`
|
|
251
|
+
* @param options MCP client and transport (header) options
|
|
252
|
+
* @returns authUrl
|
|
253
|
+
*/
|
|
254
|
+
addMcpServer(
|
|
255
|
+
serverName: string,
|
|
256
|
+
url: string,
|
|
257
|
+
callbackHost: string,
|
|
258
|
+
agentsPrefix?: string,
|
|
259
|
+
options?: {
|
|
260
|
+
client?: ConstructorParameters<typeof Client>[1];
|
|
261
|
+
transport?: {
|
|
262
|
+
headers: HeadersInit;
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
): Promise<{
|
|
266
|
+
id: string;
|
|
267
|
+
authUrl: string | undefined;
|
|
268
|
+
}>;
|
|
269
|
+
removeMcpServer(id: string): Promise<void>;
|
|
220
270
|
}
|
|
221
271
|
/**
|
|
222
272
|
* Namespace for creating Agent instances
|
|
@@ -301,6 +351,9 @@ export {
|
|
|
301
351
|
type AgentNamespace,
|
|
302
352
|
type AgentOptions,
|
|
303
353
|
type CallableMetadata,
|
|
354
|
+
type MCPServer,
|
|
355
|
+
type MCPServerMessage,
|
|
356
|
+
type MCPServersState,
|
|
304
357
|
type RPCRequest,
|
|
305
358
|
type RPCResponse,
|
|
306
359
|
type Schedule,
|
package/dist/index.js
CHANGED
|
@@ -6,8 +6,10 @@ import {
|
|
|
6
6
|
routeAgentEmail,
|
|
7
7
|
routeAgentRequest,
|
|
8
8
|
unstable_callable
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-YFPCCSZO.js";
|
|
10
|
+
import "./chunk-D6UOOELW.js";
|
|
11
|
+
import "./chunk-RN4SNE73.js";
|
|
12
|
+
import "./chunk-25YDMV4H.js";
|
|
11
13
|
import "./chunk-HMLY7DHA.js";
|
|
12
14
|
export {
|
|
13
15
|
Agent,
|
package/dist/mcp/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as zod from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { Tool, Prompt, Resource, ResourceTemplate, ServerCapabilities, CallToolRequest, CallToolResultSchema, CompatibilityCallToolResultSchema, ReadResourceRequest, GetPromptRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
3
3
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
4
4
|
import { SSEClientTransportOptions } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
5
5
|
import { AgentsOAuthProvider } from './do-oauth-client-provider.js';
|
|
@@ -15,7 +15,6 @@ declare class MCPClientConnection {
|
|
|
15
15
|
authProvider?: AgentsOAuthProvider;
|
|
16
16
|
};
|
|
17
17
|
client: ConstructorParameters<typeof Client>[1];
|
|
18
|
-
capabilities: ClientCapabilities;
|
|
19
18
|
};
|
|
20
19
|
client: Client;
|
|
21
20
|
connectionState: "authenticating" | "connecting" | "ready" | "discovering" | "failed";
|
|
@@ -30,7 +29,6 @@ declare class MCPClientConnection {
|
|
|
30
29
|
authProvider?: AgentsOAuthProvider;
|
|
31
30
|
};
|
|
32
31
|
client: ConstructorParameters<typeof Client>[1];
|
|
33
|
-
capabilities: ClientCapabilities;
|
|
34
32
|
});
|
|
35
33
|
/**
|
|
36
34
|
* Initialize a client connection
|
|
@@ -38,7 +36,7 @@ declare class MCPClientConnection {
|
|
|
38
36
|
* @param code Optional OAuth code to initialize the connection with if auth hasn't been initialized
|
|
39
37
|
* @returns
|
|
40
38
|
*/
|
|
41
|
-
init(code?: string
|
|
39
|
+
init(code?: string): Promise<void>;
|
|
42
40
|
/**
|
|
43
41
|
* Notification handler registration
|
|
44
42
|
*/
|
|
@@ -57,13 +55,21 @@ declare class MCPClientConnection {
|
|
|
57
55
|
} | undefined;
|
|
58
56
|
};
|
|
59
57
|
description?: string | undefined;
|
|
58
|
+
annotations?: {
|
|
59
|
+
[x: string]: unknown;
|
|
60
|
+
title?: string | undefined;
|
|
61
|
+
readOnlyHint?: boolean | undefined;
|
|
62
|
+
destructiveHint?: boolean | undefined;
|
|
63
|
+
idempotentHint?: boolean | undefined;
|
|
64
|
+
openWorldHint?: boolean | undefined;
|
|
65
|
+
} | undefined;
|
|
60
66
|
}[]>;
|
|
61
67
|
fetchResources(): Promise<{
|
|
62
68
|
[x: string]: unknown;
|
|
63
|
-
uri: string;
|
|
64
69
|
name: string;
|
|
65
|
-
|
|
70
|
+
uri: string;
|
|
66
71
|
description?: string | undefined;
|
|
72
|
+
mimeType?: string | undefined;
|
|
67
73
|
}[]>;
|
|
68
74
|
fetchPrompts(): Promise<{
|
|
69
75
|
[x: string]: unknown;
|
|
@@ -80,8 +86,8 @@ declare class MCPClientConnection {
|
|
|
80
86
|
[x: string]: unknown;
|
|
81
87
|
name: string;
|
|
82
88
|
uriTemplate: string;
|
|
83
|
-
mimeType?: string | undefined;
|
|
84
89
|
description?: string | undefined;
|
|
90
|
+
mimeType?: string | undefined;
|
|
85
91
|
}[]>;
|
|
86
92
|
}
|
|
87
93
|
|
|
@@ -116,10 +122,10 @@ declare class MCPClientManager {
|
|
|
116
122
|
authProvider?: AgentsOAuthProvider;
|
|
117
123
|
};
|
|
118
124
|
client?: ConstructorParameters<typeof Client>[1];
|
|
119
|
-
capabilities?: ClientCapabilities;
|
|
120
125
|
}): Promise<{
|
|
121
126
|
id: string;
|
|
122
|
-
authUrl
|
|
127
|
+
authUrl?: string;
|
|
128
|
+
clientId?: string;
|
|
123
129
|
}>;
|
|
124
130
|
isCallbackRequest(req: Request): boolean;
|
|
125
131
|
handleCallbackRequest(req: Request): Promise<{
|
package/dist/mcp/client.js
CHANGED
|
@@ -1,106 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DurableObjectOAuthClientProvider
|
|
3
|
+
} from "../chunk-D6UOOELW.js";
|
|
1
4
|
import "../chunk-HMLY7DHA.js";
|
|
2
|
-
|
|
3
|
-
// src/mcp/do-oauth-client-provider.ts
|
|
4
|
-
var DurableObjectOAuthClientProvider = class {
|
|
5
|
-
constructor(storage, clientName, baseRedirectUrl) {
|
|
6
|
-
this.storage = storage;
|
|
7
|
-
this.clientName = clientName;
|
|
8
|
-
this.baseRedirectUrl = baseRedirectUrl;
|
|
9
|
-
}
|
|
10
|
-
get clientMetadata() {
|
|
11
|
-
return {
|
|
12
|
-
redirect_uris: [this.redirectUrl],
|
|
13
|
-
token_endpoint_auth_method: "none",
|
|
14
|
-
grant_types: ["authorization_code", "refresh_token"],
|
|
15
|
-
response_types: ["code"],
|
|
16
|
-
client_name: this.clientName,
|
|
17
|
-
client_uri: "example.com"
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
get redirectUrl() {
|
|
21
|
-
return `${this.baseRedirectUrl}/${this.serverId}`;
|
|
22
|
-
}
|
|
23
|
-
get clientId() {
|
|
24
|
-
if (!this.clientId_) {
|
|
25
|
-
throw new Error("Trying to access clientId before it was set");
|
|
26
|
-
}
|
|
27
|
-
return this.clientId_;
|
|
28
|
-
}
|
|
29
|
-
set clientId(clientId_) {
|
|
30
|
-
this.clientId_ = clientId_;
|
|
31
|
-
}
|
|
32
|
-
get serverId() {
|
|
33
|
-
if (!this.serverId_) {
|
|
34
|
-
throw new Error("Trying to access serverId before it was set");
|
|
35
|
-
}
|
|
36
|
-
return this.serverId_;
|
|
37
|
-
}
|
|
38
|
-
set serverId(serverId_) {
|
|
39
|
-
this.serverId_ = serverId_;
|
|
40
|
-
}
|
|
41
|
-
keyPrefix(clientId) {
|
|
42
|
-
return `/${this.clientName}/${this.serverId}/${clientId}`;
|
|
43
|
-
}
|
|
44
|
-
clientInfoKey(clientId) {
|
|
45
|
-
return `${this.keyPrefix(clientId)}/client_info/`;
|
|
46
|
-
}
|
|
47
|
-
async clientInformation() {
|
|
48
|
-
if (!this.clientId_) {
|
|
49
|
-
return void 0;
|
|
50
|
-
}
|
|
51
|
-
return await this.storage.get(
|
|
52
|
-
this.clientInfoKey(this.clientId)
|
|
53
|
-
) ?? void 0;
|
|
54
|
-
}
|
|
55
|
-
async saveClientInformation(clientInformation) {
|
|
56
|
-
await this.storage.put(
|
|
57
|
-
this.clientInfoKey(clientInformation.client_id),
|
|
58
|
-
clientInformation
|
|
59
|
-
);
|
|
60
|
-
this.clientId = clientInformation.client_id;
|
|
61
|
-
}
|
|
62
|
-
tokenKey(clientId) {
|
|
63
|
-
return `${this.keyPrefix(clientId)}/token`;
|
|
64
|
-
}
|
|
65
|
-
async tokens() {
|
|
66
|
-
if (!this.clientId_) {
|
|
67
|
-
return void 0;
|
|
68
|
-
}
|
|
69
|
-
return await this.storage.get(this.tokenKey(this.clientId)) ?? void 0;
|
|
70
|
-
}
|
|
71
|
-
async saveTokens(tokens) {
|
|
72
|
-
await this.storage.put(this.tokenKey(this.clientId), tokens);
|
|
73
|
-
}
|
|
74
|
-
get authUrl() {
|
|
75
|
-
return this.authUrl_;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Because this operates on the server side (but we need browser auth), we send this url back to the user
|
|
79
|
-
* and require user interact to initiate the redirect flow
|
|
80
|
-
*/
|
|
81
|
-
async redirectToAuthorization(authUrl) {
|
|
82
|
-
const client_id = authUrl.searchParams.get("client_id");
|
|
83
|
-
if (client_id) {
|
|
84
|
-
authUrl.searchParams.append("state", client_id);
|
|
85
|
-
}
|
|
86
|
-
this.authUrl_ = authUrl.toString();
|
|
87
|
-
}
|
|
88
|
-
codeVerifierKey(clientId) {
|
|
89
|
-
return `${this.keyPrefix(clientId)}/code_verifier`;
|
|
90
|
-
}
|
|
91
|
-
async saveCodeVerifier(verifier) {
|
|
92
|
-
await this.storage.put(this.codeVerifierKey(this.clientId), verifier);
|
|
93
|
-
}
|
|
94
|
-
async codeVerifier() {
|
|
95
|
-
const codeVerifier = await this.storage.get(
|
|
96
|
-
this.codeVerifierKey(this.clientId)
|
|
97
|
-
);
|
|
98
|
-
if (!codeVerifier) {
|
|
99
|
-
throw new Error("No code verifier found");
|
|
100
|
-
}
|
|
101
|
-
return codeVerifier;
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
5
|
export {
|
|
105
6
|
DurableObjectOAuthClientProvider
|
|
106
7
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/mcp/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ interface CORSOptions {
|
|
|
18
18
|
methods?: string;
|
|
19
19
|
headers?: string;
|
|
20
20
|
maxAge?: number;
|
|
21
|
+
exposeHeaders?: string;
|
|
21
22
|
}
|
|
22
23
|
type MaybePromise<T> = T | Promise<T>;
|
|
23
24
|
declare abstract class McpAgent<Env = unknown, State = unknown, Props extends Record<string, unknown> = Record<string, unknown>> extends DurableObject<Env> {
|
package/dist/mcp/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Agent
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-YFPCCSZO.js";
|
|
4
|
+
import "../chunk-D6UOOELW.js";
|
|
5
|
+
import "../chunk-RN4SNE73.js";
|
|
6
|
+
import "../chunk-25YDMV4H.js";
|
|
5
7
|
import {
|
|
6
8
|
__privateAdd,
|
|
7
9
|
__privateGet,
|
|
@@ -20,16 +22,19 @@ import {
|
|
|
20
22
|
JSONRPCMessageSchema
|
|
21
23
|
} from "@modelcontextprotocol/sdk/types.js";
|
|
22
24
|
var MAXIMUM_MESSAGE_SIZE_BYTES = 4 * 1024 * 1024;
|
|
23
|
-
function
|
|
24
|
-
const origin =
|
|
25
|
-
|
|
26
|
-
"Access-Control-Allow-Origin": corsOptions
|
|
27
|
-
"Access-Control-Allow-Methods": corsOptions
|
|
28
|
-
"Access-Control-Allow-Headers": corsOptions
|
|
29
|
-
"Access-Control-Max-Age": (corsOptions
|
|
25
|
+
function corsHeaders(request, corsOptions = {}) {
|
|
26
|
+
const origin = "*";
|
|
27
|
+
return {
|
|
28
|
+
"Access-Control-Allow-Origin": corsOptions.origin || origin,
|
|
29
|
+
"Access-Control-Allow-Methods": corsOptions.methods || "GET, POST, OPTIONS",
|
|
30
|
+
"Access-Control-Allow-Headers": corsOptions.headers || "Content-Type, mcp-session-id",
|
|
31
|
+
"Access-Control-Max-Age": (corsOptions.maxAge || 86400).toString(),
|
|
32
|
+
"Access-Control-Expose-Headers": corsOptions.exposeHeaders || "mcp-session-id"
|
|
30
33
|
};
|
|
34
|
+
}
|
|
35
|
+
function handleCORS(request, corsOptions) {
|
|
31
36
|
if (request.method === "OPTIONS") {
|
|
32
|
-
return new Response(null, { headers: corsHeaders });
|
|
37
|
+
return new Response(null, { headers: corsHeaders(request, corsOptions) });
|
|
33
38
|
}
|
|
34
39
|
return null;
|
|
35
40
|
}
|
|
@@ -460,7 +465,7 @@ data: ${JSON.stringify(result.data)}
|
|
|
460
465
|
"Content-Type": "text/event-stream",
|
|
461
466
|
"Cache-Control": "no-cache",
|
|
462
467
|
Connection: "keep-alive",
|
|
463
|
-
|
|
468
|
+
...corsHeaders(request, corsOptions)
|
|
464
469
|
}
|
|
465
470
|
});
|
|
466
471
|
}
|
|
@@ -500,7 +505,7 @@ data: ${JSON.stringify(result.data)}
|
|
|
500
505
|
"Content-Type": "text/event-stream",
|
|
501
506
|
"Cache-Control": "no-cache",
|
|
502
507
|
Connection: "keep-alive",
|
|
503
|
-
|
|
508
|
+
...corsHeaders(request, corsOptions)
|
|
504
509
|
}
|
|
505
510
|
});
|
|
506
511
|
}
|
|
@@ -510,7 +515,7 @@ data: ${JSON.stringify(result.data)}
|
|
|
510
515
|
"Content-Type": "text/event-stream",
|
|
511
516
|
"Cache-Control": "no-cache",
|
|
512
517
|
Connection: "keep-alive",
|
|
513
|
-
|
|
518
|
+
...corsHeaders(request, corsOptions)
|
|
514
519
|
}
|
|
515
520
|
});
|
|
516
521
|
}
|
|
@@ -758,7 +763,10 @@ data: ${JSON.stringify(result.data)}
|
|
|
758
763
|
ws.send(JSON.stringify(message));
|
|
759
764
|
}
|
|
760
765
|
ws.close();
|
|
761
|
-
return new Response(null, {
|
|
766
|
+
return new Response(null, {
|
|
767
|
+
status: 202,
|
|
768
|
+
headers: corsHeaders(request, corsOptions)
|
|
769
|
+
});
|
|
762
770
|
}
|
|
763
771
|
for (const message of messages) {
|
|
764
772
|
if (isJSONRPCRequest(message)) {
|
|
@@ -772,7 +780,7 @@ data: ${JSON.stringify(result.data)}
|
|
|
772
780
|
"Cache-Control": "no-cache",
|
|
773
781
|
Connection: "keep-alive",
|
|
774
782
|
"mcp-session-id": sessionId,
|
|
775
|
-
|
|
783
|
+
...corsHeaders(request, corsOptions)
|
|
776
784
|
},
|
|
777
785
|
status: 200
|
|
778
786
|
});
|