-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathutils.ts
More file actions
81 lines (70 loc) · 1.99 KB
/
utils.ts
File metadata and controls
81 lines (70 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import { nanoid } from 'nanoid'
import type { JSONRPCRequest, JSONRPCResponse, JSONRPCNotification } from '../types.js'
export function generateId(): string {
return nanoid()
}
export function createRequest(method: string, params?: Record<string, any>): JSONRPCRequest {
return {
jsonrpc: '2.0',
id: generateId(),
method,
...(params && { params }),
}
}
export function createResponse(
id: string | number,
result?: any,
error?: { code: number; message: string; data?: any },
): JSONRPCResponse {
return {
jsonrpc: '2.0',
id,
...(result !== undefined && { result }),
...(error && { error }),
}
}
export function createNotification(method: string, params?: Record<string, any>): JSONRPCNotification {
return {
jsonrpc: '2.0',
method,
...(params && { params }),
}
}
export function isRequest(message: any): message is JSONRPCRequest {
return Boolean(
message && typeof message === 'object' && message.jsonrpc === '2.0' && 'method' in message && 'id' in message,
)
}
export function isResponse(message: any): message is JSONRPCResponse {
return Boolean(
message && typeof message === 'object' && message.jsonrpc === '2.0' && 'id' in message && !('method' in message),
)
}
export function isNotification(message: any): message is JSONRPCNotification {
return Boolean(
message && typeof message === 'object' && message.jsonrpc === '2.0' && 'method' in message && !('id' in message),
)
}
export function isBrowser(): boolean {
return typeof window !== 'undefined' && typeof window.document !== 'undefined'
}
export function isNode(): boolean {
return typeof process !== 'undefined' && process.versions && !!process.versions.node
}
export class McpError extends Error {
constructor(
public code: number,
message: string,
public data?: any,
) {
super(message)
this.name = 'McpError'
}
toJSON() {
return {
code: this.code,
message: this.message,
...(this.data && { data: this.data }),
}
}
}