@or-sdk/mcp-tools 0.5.0-beta.4165.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/CHANGELOG.md +115 -0
- package/README.md +109 -0
- package/dist/cjs/McpTools.js +171 -0
- package/dist/cjs/McpTools.js.map +1 -0
- package/dist/cjs/constants.js +5 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/error-parser/OrNetworkError.js +37 -0
- package/dist/cjs/error-parser/OrNetworkError.js.map +1 -0
- package/dist/cjs/error-parser/index.js +33 -0
- package/dist/cjs/error-parser/index.js.map +1 -0
- package/dist/cjs/error-parser/parse-axios-error.js +30 -0
- package/dist/cjs/error-parser/parse-axios-error.js.map +1 -0
- package/dist/cjs/error-parser/processors.js +22 -0
- package/dist/cjs/error-parser/processors.js.map +1 -0
- package/dist/cjs/error-parser/types.js +3 -0
- package/dist/cjs/error-parser/types.js.map +1 -0
- package/dist/cjs/guards.js +8 -0
- package/dist/cjs/guards.js.map +1 -0
- package/dist/cjs/index.js +23 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/McpTools.js +85 -0
- package/dist/esm/McpTools.js.map +1 -0
- package/dist/esm/constants.js +2 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/error-parser/OrNetworkError.js +10 -0
- package/dist/esm/error-parser/OrNetworkError.js.map +1 -0
- package/dist/esm/error-parser/index.js +12 -0
- package/dist/esm/error-parser/index.js.map +1 -0
- package/dist/esm/error-parser/parse-axios-error.js +27 -0
- package/dist/esm/error-parser/parse-axios-error.js.map +1 -0
- package/dist/esm/error-parser/processors.js +16 -0
- package/dist/esm/error-parser/processors.js.map +1 -0
- package/dist/esm/error-parser/types.js +2 -0
- package/dist/esm/error-parser/types.js.map +1 -0
- package/dist/esm/guards.js +5 -0
- package/dist/esm/guards.js.map +1 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/types/McpTools.d.ts +14 -0
- package/dist/types/McpTools.d.ts.map +1 -0
- package/dist/types/constants.d.ts +2 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/error-parser/OrNetworkError.d.ts +12 -0
- package/dist/types/error-parser/OrNetworkError.d.ts.map +1 -0
- package/dist/types/error-parser/index.d.ts +5 -0
- package/dist/types/error-parser/index.d.ts.map +1 -0
- package/dist/types/error-parser/parse-axios-error.d.ts +3 -0
- package/dist/types/error-parser/parse-axios-error.d.ts.map +1 -0
- package/dist/types/error-parser/processors.d.ts +7 -0
- package/dist/types/error-parser/processors.d.ts.map +1 -0
- package/dist/types/error-parser/types.d.ts +9 -0
- package/dist/types/error-parser/types.d.ts.map +1 -0
- package/dist/types/guards.d.ts +3 -0
- package/dist/types/guards.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types.d.ts +59 -0
- package/dist/types/types.d.ts.map +1 -0
- package/package.json +34 -0
- package/src/McpTools.ts +128 -0
- package/src/constants.ts +1 -0
- package/src/error-parser/OrNetworkError.ts +17 -0
- package/src/error-parser/index.ts +16 -0
- package/src/error-parser/parse-axios-error.ts +33 -0
- package/src/error-parser/processors.ts +21 -0
- package/src/error-parser/types.ts +13 -0
- package/src/guards.ts +5 -0
- package/src/index.ts +4 -0
- package/src/types.ts +85 -0
- package/tsconfig.dev.json +10 -0
- package/tsconfig.esm.json +14 -0
- package/tsconfig.json +9 -0
- package/tsconfig.types.json +12 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { Base } from '@or-sdk/base';
|
|
11
|
+
import { SERVICE_KEY } from './constants';
|
|
12
|
+
import { createErrorParser, processors } from './error-parser';
|
|
13
|
+
const errorParser = createErrorParser(processors.AXIOS);
|
|
14
|
+
export class McpTools extends Base {
|
|
15
|
+
constructor(params) {
|
|
16
|
+
const { token, discoveryUrl, mcpApiUrl, mcpToolsUrl } = params;
|
|
17
|
+
super({
|
|
18
|
+
token,
|
|
19
|
+
discoveryUrl,
|
|
20
|
+
serviceKey: SERVICE_KEY,
|
|
21
|
+
useDefaultSerializer: true,
|
|
22
|
+
});
|
|
23
|
+
this._mcpApiUrl = mcpApiUrl;
|
|
24
|
+
this._mcpToolsUrl = mcpToolsUrl;
|
|
25
|
+
}
|
|
26
|
+
makeRequest(params) {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
return this.callApiV2(params);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
parseError(err) {
|
|
32
|
+
return errorParser(err);
|
|
33
|
+
}
|
|
34
|
+
getInternalServers() {
|
|
35
|
+
return __awaiter(this, arguments, void 0, function* (options = {}) {
|
|
36
|
+
if (!this._mcpApiUrl) {
|
|
37
|
+
throw new Error('mcpApiUrl is required for getInternalServers');
|
|
38
|
+
}
|
|
39
|
+
return this.makeRequest(Object.assign({ method: 'GET', route: 'internal/servers', url: this._mcpApiUrl }, options));
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
getDiscovery() {
|
|
43
|
+
return __awaiter(this, arguments, void 0, function* (options = {}) {
|
|
44
|
+
if (!this._mcpToolsUrl) {
|
|
45
|
+
throw new Error('mcpToolsUrl is required for getDiscovery');
|
|
46
|
+
}
|
|
47
|
+
return this.makeRequest(Object.assign({ method: 'GET', route: 'mcp/discovery', url: this._mcpToolsUrl }, options));
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
getAvailableMcp() {
|
|
51
|
+
return __awaiter(this, arguments, void 0, function* (options = {}) {
|
|
52
|
+
const [serversResult, discoveryResult] = yield Promise.allSettled([
|
|
53
|
+
this._mcpApiUrl ? this.getInternalServers(options) : Promise.resolve(null),
|
|
54
|
+
this._mcpToolsUrl ? this.getDiscovery(options) : Promise.resolve(null),
|
|
55
|
+
]);
|
|
56
|
+
const fromServers = serversResult.status === 'fulfilled' && serversResult.value
|
|
57
|
+
? serversResult.value.servers.map((s) => ({
|
|
58
|
+
name: s.name,
|
|
59
|
+
url: s.url,
|
|
60
|
+
description: s.description,
|
|
61
|
+
auth: 'bearer',
|
|
62
|
+
source: 'internal',
|
|
63
|
+
}))
|
|
64
|
+
: [];
|
|
65
|
+
const fromDiscovery = discoveryResult.status === 'fulfilled' && discoveryResult.value
|
|
66
|
+
? discoveryResult.value.packages.map((p) => ({
|
|
67
|
+
name: p.package,
|
|
68
|
+
url: p.url,
|
|
69
|
+
auth: p.auth,
|
|
70
|
+
redirectUrl: p.redirectUrl,
|
|
71
|
+
source: 'discovery',
|
|
72
|
+
}))
|
|
73
|
+
: [];
|
|
74
|
+
const items = [...fromServers, ...fromDiscovery];
|
|
75
|
+
return {
|
|
76
|
+
items,
|
|
77
|
+
total: items.length,
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
authorizeOAuthPackage(pkg) {
|
|
82
|
+
return window.open(pkg.redirectUrl, '_blank');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=McpTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpTools.js","sourceRoot":"","sources":["../../src/McpTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrNetworkError.js","sourceRoot":"","sources":["../../../src/error-parser/OrNetworkError.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGvC,YAAY,EAAE,OAAO,EAAE,MAAM,EAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './OrNetworkError';
|
|
2
|
+
export * from './processors';
|
|
3
|
+
export function createErrorParser(...processors) {
|
|
4
|
+
return function parseError(error) {
|
|
5
|
+
const processor = processors.find((p) => p.guard(error));
|
|
6
|
+
if (processor) {
|
|
7
|
+
return processor.convertError(error);
|
|
8
|
+
}
|
|
9
|
+
return new Error('Unknown Error');
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/error-parser/index.ts"],"names":[],"mappings":"AAEA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAE7B,MAAM,UAAU,iBAAiB,CAAI,GAAG,UAA+B;IACrE,OAAO,SAAS,UAAU,CAAC,KAAc;QACvC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAEzD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC,YAAY,CAAC,KAAU,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { OrNetworkError } from './OrNetworkError';
|
|
2
|
+
const MESSAGES = {
|
|
3
|
+
401: 'We are not able to authenticate you',
|
|
4
|
+
500: 'Internal server error',
|
|
5
|
+
};
|
|
6
|
+
export function parseAxiosError(e) {
|
|
7
|
+
if (e.response) {
|
|
8
|
+
const data = e.response.data;
|
|
9
|
+
const status = e.response.status;
|
|
10
|
+
const generalMessage = MESSAGES[status] || e.message;
|
|
11
|
+
const message = normalizeMessage(data.message || data.error) || generalMessage;
|
|
12
|
+
return new OrNetworkError({
|
|
13
|
+
message,
|
|
14
|
+
status,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return new Error(e.message);
|
|
18
|
+
}
|
|
19
|
+
function normalizeMessage(message) {
|
|
20
|
+
if (typeof message === 'string') {
|
|
21
|
+
return message;
|
|
22
|
+
}
|
|
23
|
+
if (Array.isArray(message)) {
|
|
24
|
+
return message.join('. ');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=parse-axios-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-axios-error.js","sourceRoot":"","sources":["../../../src/error-parser/parse-axios-error.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,QAAQ,GAA2B;IACvC,GAAG,EAAE,qCAAqC;IAC1C,GAAG,EAAE,uBAAuB;CAC7B,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,CAAa;IAC3C,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,IAA+B,CAAC;QACxD,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QACrD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC;QAE/E,OAAO,IAAI,cAAc,CAAC;YACxB,OAAO;YACP,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAgB;IACxC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { parseAxiosError as deprecatedParseAxiosError } from '@or-sdk/base';
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { parseAxiosError } from './parse-axios-error';
|
|
4
|
+
const DEPRECATED_AXIOS = {
|
|
5
|
+
guard: axios.isAxiosError,
|
|
6
|
+
convertError: deprecatedParseAxiosError,
|
|
7
|
+
};
|
|
8
|
+
const AXIOS = {
|
|
9
|
+
guard: axios.isAxiosError,
|
|
10
|
+
convertError: parseAxiosError,
|
|
11
|
+
};
|
|
12
|
+
export const processors = {
|
|
13
|
+
AXIOS,
|
|
14
|
+
DEPRECATED_AXIOS,
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=processors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processors.js","sourceRoot":"","sources":["../../../src/error-parser/processors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,IAAI,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,MAAM,gBAAgB,GAA+B;IACnD,KAAK,EAAE,KAAK,CAAC,YAAY;IACzB,YAAY,EAAE,yBAAoD;CACnE,CAAC;AAEF,MAAM,KAAK,GAA+B;IACxC,KAAK,EAAE,KAAK,CAAC,YAAY;IACzB,YAAY,EAAE,eAAe;CAC9B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,KAAK;IACL,gBAAgB;CACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/error-parser/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,GAAG,YAAY,cAAc,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Base } from '@or-sdk/base';
|
|
2
|
+
import { AvailableMcpResponse, CallOptions, Config, DiscoveryResponse, InternalServersResponse, OAuthPackage } from './types';
|
|
3
|
+
export declare class McpTools extends Base {
|
|
4
|
+
private readonly _mcpApiUrl?;
|
|
5
|
+
private readonly _mcpToolsUrl?;
|
|
6
|
+
constructor(params: Config);
|
|
7
|
+
private makeRequest;
|
|
8
|
+
parseError(err: unknown): Error;
|
|
9
|
+
getInternalServers(options?: CallOptions): Promise<InternalServersResponse>;
|
|
10
|
+
getDiscovery(options?: CallOptions): Promise<DiscoveryResponse>;
|
|
11
|
+
getAvailableMcp(options?: CallOptions): Promise<AvailableMcpResponse>;
|
|
12
|
+
authorizeOAuthPackage(pkg: OAuthPackage): Window | null;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=McpTools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"McpTools.d.ts","sourceRoot":"","sources":["../../src/McpTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,cAAc,CAAC;AAIlD,OAAO,EAEL,oBAAoB,EACpB,WAAW,EACX,MAAM,EACN,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACb,MAAM,SAAS,CAAC;AAIjB,qBAAa,QAAS,SAAQ,IAAI;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;gBAE3B,MAAM,EAAE,MAAM;YAcZ,WAAW;IAIzB,UAAU,CAAC,GAAG,EAAE,OAAO;IASjB,kBAAkB,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkB/E,YAAY,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkBnE,eAAe,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAyC/E,qBAAqB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI;CAGxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type CtorOptions = {
|
|
2
|
+
message: string;
|
|
3
|
+
status?: number;
|
|
4
|
+
};
|
|
5
|
+
export declare class OrNetworkError extends Error {
|
|
6
|
+
private _status;
|
|
7
|
+
private _description;
|
|
8
|
+
constructor({ message, status }: CtorOptions);
|
|
9
|
+
get status(): number | undefined;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=OrNetworkError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrNetworkError.d.ts","sourceRoot":"","sources":["../../../src/error-parser/OrNetworkError.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,cAAe,SAAQ,KAAK;IACvC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,YAAY,CAAqB;gBAC7B,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,WAAW;IAK5C,IAAI,MAAM,uBAET;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/error-parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAE7B,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,WACnC,OAAO,WAS1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-axios-error.d.ts","sourceRoot":"","sources":["../../../src/error-parser/parse-axios-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AASxC,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,KAAK,CAcpD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AxiosError } from 'axios';
|
|
2
|
+
import type { ErrorProcessor } from './types';
|
|
3
|
+
export declare const processors: {
|
|
4
|
+
AXIOS: ErrorProcessor<AxiosError<unknown, any>>;
|
|
5
|
+
DEPRECATED_AXIOS: ErrorProcessor<AxiosError<unknown, any>>;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=processors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processors.d.ts","sourceRoot":"","sources":["../../../src/error-parser/processors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,SAAS,CAAC;AAY3D,eAAO,MAAM,UAAU;;;CAGtB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type ErrorParser<T> = (error: T) => Error;
|
|
2
|
+
export type ErrorProcessor<E = unknown> = {
|
|
3
|
+
guard: (error: unknown) => error is E;
|
|
4
|
+
convertError: (error: E) => Error;
|
|
5
|
+
};
|
|
6
|
+
export type CallOptions = {
|
|
7
|
+
signal?: AbortSignal;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/error-parser/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC;AAEjD,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI;IACxC,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC;IACtC,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAIxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CAEpE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Token } from '@or-sdk/base';
|
|
2
|
+
export type Config = {
|
|
3
|
+
token: Token;
|
|
4
|
+
discoveryUrl?: string;
|
|
5
|
+
mcpToolsUrl?: string;
|
|
6
|
+
mcpApiUrl?: string;
|
|
7
|
+
};
|
|
8
|
+
export type CallOptions = {
|
|
9
|
+
signal?: AbortSignal;
|
|
10
|
+
};
|
|
11
|
+
export type McpServer = {
|
|
12
|
+
id: string;
|
|
13
|
+
flowId: string;
|
|
14
|
+
accountId: string;
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
version: string;
|
|
18
|
+
isMetadataEndpointEnabled: boolean;
|
|
19
|
+
isBearerTokenValidationEnabled: boolean;
|
|
20
|
+
tokenValidationCacheTtlSeconds: number;
|
|
21
|
+
isStandardAuthEndpointsEnabled: boolean;
|
|
22
|
+
timeout: number;
|
|
23
|
+
label: string;
|
|
24
|
+
url: string;
|
|
25
|
+
botId: string;
|
|
26
|
+
flowUrl: string;
|
|
27
|
+
};
|
|
28
|
+
export type InternalServersResponse = {
|
|
29
|
+
servers: McpServer[];
|
|
30
|
+
total: number;
|
|
31
|
+
};
|
|
32
|
+
export type McpPackage = {
|
|
33
|
+
package: string;
|
|
34
|
+
url: string;
|
|
35
|
+
auth: 'oauth' | string;
|
|
36
|
+
redirectUrl?: string;
|
|
37
|
+
};
|
|
38
|
+
export type OAuthPackage = McpPackage & {
|
|
39
|
+
auth: 'oauth';
|
|
40
|
+
redirectUrl: string;
|
|
41
|
+
};
|
|
42
|
+
export type AvailableMcp = {
|
|
43
|
+
name: string;
|
|
44
|
+
url: string;
|
|
45
|
+
description?: string;
|
|
46
|
+
auth: 'oauth' | string;
|
|
47
|
+
redirectUrl?: string;
|
|
48
|
+
source: 'internal' | 'discovery';
|
|
49
|
+
};
|
|
50
|
+
export type AvailableMcpResponse = {
|
|
51
|
+
items: AvailableMcp[];
|
|
52
|
+
total: number;
|
|
53
|
+
};
|
|
54
|
+
export type DiscoveryResponse = {
|
|
55
|
+
description: string;
|
|
56
|
+
auth: string;
|
|
57
|
+
packages: McpPackage[];
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAKrC,MAAM,MAAM,MAAM,GAAG;IAInB,KAAK,EAAE,KAAK,CAAC;IAKb,YAAY,CAAC,EAAE,MAAM,CAAC;IAKtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAKrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB,EAAE,OAAO,CAAC;IACnC,8BAA8B,EAAE,OAAO,CAAC;IACxC,8BAA8B,EAAE,MAAM,CAAC;IACvC,8BAA8B,EAAE,OAAO,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@or-sdk/mcp-tools",
|
|
3
|
+
"version": "0.5.0-beta.4165.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"author": "",
|
|
7
|
+
"main": "dist/cjs/index.js",
|
|
8
|
+
"module": "dist/esm/index.js",
|
|
9
|
+
"types": "dist/types/index.d.ts",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "pnpm clean && concurrently 'pnpm:build:*(!watch)'",
|
|
12
|
+
"build:cjs": "tsc --project tsconfig.json",
|
|
13
|
+
"build:esm": "tsc --project tsconfig.esm.json",
|
|
14
|
+
"build:types": "tsc --project tsconfig.types.json",
|
|
15
|
+
"build:watch": "concurrently 'pnpm:build:watch:*'",
|
|
16
|
+
"build:watch:cjs": "tsc --project tsconfig.json -w",
|
|
17
|
+
"build:watch:esm": "tsc --project tsconfig.esm.json -w",
|
|
18
|
+
"build:watch:types": "tsc --project tsconfig.types.json -w",
|
|
19
|
+
"clean": "rm -rf ./dist",
|
|
20
|
+
"coverage": "vitest run --coverage",
|
|
21
|
+
"dev": "pnpm build:watch:esm"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@or-sdk/base": "^0.44.2"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"concurrently": "9.0.1",
|
|
28
|
+
"msw": "2.8.2",
|
|
29
|
+
"typescript": "5.6.2"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
}
|
|
34
|
+
}
|
package/src/McpTools.ts
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Base, CalApiParams } from '@or-sdk/base';
|
|
2
|
+
|
|
3
|
+
import { SERVICE_KEY } from './constants';
|
|
4
|
+
import { createErrorParser, processors } from './error-parser';
|
|
5
|
+
import {
|
|
6
|
+
AvailableMcp,
|
|
7
|
+
AvailableMcpResponse,
|
|
8
|
+
CallOptions,
|
|
9
|
+
Config,
|
|
10
|
+
DiscoveryResponse,
|
|
11
|
+
InternalServersResponse,
|
|
12
|
+
OAuthPackage,
|
|
13
|
+
} from './types';
|
|
14
|
+
|
|
15
|
+
const errorParser = createErrorParser(processors.AXIOS);
|
|
16
|
+
|
|
17
|
+
export class McpTools extends Base {
|
|
18
|
+
private readonly _mcpApiUrl?: string;
|
|
19
|
+
private readonly _mcpToolsUrl?: string;
|
|
20
|
+
|
|
21
|
+
constructor(params: Config) {
|
|
22
|
+
const { token, discoveryUrl, mcpApiUrl, mcpToolsUrl } = params;
|
|
23
|
+
|
|
24
|
+
super({
|
|
25
|
+
token,
|
|
26
|
+
discoveryUrl,
|
|
27
|
+
serviceKey: SERVICE_KEY,
|
|
28
|
+
useDefaultSerializer: true,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
this._mcpApiUrl = mcpApiUrl;
|
|
32
|
+
this._mcpToolsUrl = mcpToolsUrl;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private async makeRequest<T>(params: CalApiParams): Promise<T> {
|
|
36
|
+
return this.callApiV2<T>(params);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
parseError(err: unknown) {
|
|
40
|
+
return errorParser(err);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Retrieves the list of internal MCP servers.
|
|
45
|
+
* @param [options] - The API call options.
|
|
46
|
+
* @returns {Promise<InternalServersResponse>} A promise that resolves with the list of MCP servers.
|
|
47
|
+
*/
|
|
48
|
+
async getInternalServers(options: CallOptions = {}): Promise<InternalServersResponse> {
|
|
49
|
+
if (!this._mcpApiUrl) {
|
|
50
|
+
throw new Error('mcpApiUrl is required for getInternalServers');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return this.makeRequest<InternalServersResponse>({
|
|
54
|
+
method: 'GET',
|
|
55
|
+
route: 'internal/servers',
|
|
56
|
+
url: this._mcpApiUrl,
|
|
57
|
+
...options,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Retrieves the MCP discovery information with available packages.
|
|
63
|
+
* @param [options] - The API call options.
|
|
64
|
+
* @returns {Promise<DiscoveryResponse>} A promise that resolves with the discovery information.
|
|
65
|
+
*/
|
|
66
|
+
async getDiscovery(options: CallOptions = {}): Promise<DiscoveryResponse> {
|
|
67
|
+
if (!this._mcpToolsUrl) {
|
|
68
|
+
throw new Error('mcpToolsUrl is required for getDiscovery');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return this.makeRequest<DiscoveryResponse>({
|
|
72
|
+
method: 'GET',
|
|
73
|
+
route: 'mcp/discovery',
|
|
74
|
+
url: this._mcpToolsUrl,
|
|
75
|
+
...options,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Fetches internal MCP servers and discovery packages in parallel and returns them as a unified list.
|
|
81
|
+
* @param [options] - The API call options.
|
|
82
|
+
* @returns {Promise<AvailableMcpResponse>} A promise that resolves with all available MCP entries.
|
|
83
|
+
*/
|
|
84
|
+
async getAvailableMcp(options: CallOptions = {}): Promise<AvailableMcpResponse> {
|
|
85
|
+
const [serversResult, discoveryResult] = await Promise.allSettled([
|
|
86
|
+
this._mcpApiUrl ? this.getInternalServers(options) : Promise.resolve(null),
|
|
87
|
+
this._mcpToolsUrl ? this.getDiscovery(options) : Promise.resolve(null),
|
|
88
|
+
]);
|
|
89
|
+
|
|
90
|
+
const fromServers: AvailableMcp[] =
|
|
91
|
+
serversResult.status === 'fulfilled' && serversResult.value
|
|
92
|
+
? serversResult.value.servers.map((s) => ({
|
|
93
|
+
name: s.name,
|
|
94
|
+
url: s.url,
|
|
95
|
+
description: s.description,
|
|
96
|
+
auth: 'bearer',
|
|
97
|
+
source: 'internal' as const,
|
|
98
|
+
}))
|
|
99
|
+
: [];
|
|
100
|
+
|
|
101
|
+
const fromDiscovery: AvailableMcp[] =
|
|
102
|
+
discoveryResult.status === 'fulfilled' && discoveryResult.value
|
|
103
|
+
? discoveryResult.value.packages.map((p) => ({
|
|
104
|
+
name: p.package,
|
|
105
|
+
url: p.url,
|
|
106
|
+
auth: p.auth,
|
|
107
|
+
redirectUrl: p.redirectUrl,
|
|
108
|
+
source: 'discovery' as const,
|
|
109
|
+
}))
|
|
110
|
+
: [];
|
|
111
|
+
|
|
112
|
+
const items = [...fromServers, ...fromDiscovery];
|
|
113
|
+
|
|
114
|
+
return {
|
|
115
|
+
items,
|
|
116
|
+
total: items.length,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Opens the OAuth authorization URL for the given package in a new browser window.
|
|
122
|
+
* @param pkg - The OAuth package to authorize.
|
|
123
|
+
* @returns {Window | null} The opened window reference, or null if it could not be opened.
|
|
124
|
+
*/
|
|
125
|
+
authorizeOAuthPackage(pkg: OAuthPackage): Window | null {
|
|
126
|
+
return window.open(pkg.redirectUrl, '_blank');
|
|
127
|
+
}
|
|
128
|
+
}
|
package/src/constants.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const SERVICE_KEY = 'mcp-tools-sdk';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type CtorOptions = {
|
|
2
|
+
message: string;
|
|
3
|
+
status?: number;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export class OrNetworkError extends Error {
|
|
7
|
+
private _status: number | undefined;
|
|
8
|
+
private _description: string | undefined;
|
|
9
|
+
constructor({ message, status }: CtorOptions) {
|
|
10
|
+
super(message);
|
|
11
|
+
this._status = status;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
get status() {
|
|
15
|
+
return this._status;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ErrorProcessor } from './types';
|
|
2
|
+
|
|
3
|
+
export * from './OrNetworkError';
|
|
4
|
+
export * from './processors';
|
|
5
|
+
|
|
6
|
+
export function createErrorParser<E>(...processors: ErrorProcessor<E>[]) {
|
|
7
|
+
return function parseError(error: unknown) {
|
|
8
|
+
const processor = processors.find((p) => p.guard(error));
|
|
9
|
+
|
|
10
|
+
if (processor) {
|
|
11
|
+
return processor.convertError(error as E);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return new Error('Unknown Error');
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AxiosError } from 'axios';
|
|
2
|
+
|
|
3
|
+
import { OrNetworkError } from './OrNetworkError';
|
|
4
|
+
|
|
5
|
+
const MESSAGES: Record<number, string> = {
|
|
6
|
+
401: 'We are not able to authenticate you',
|
|
7
|
+
500: 'Internal server error',
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export function parseAxiosError(e: AxiosError): Error {
|
|
11
|
+
if (e.response) {
|
|
12
|
+
const data = e.response.data as Record<string, unknown>;
|
|
13
|
+
const status = e.response.status;
|
|
14
|
+
const generalMessage = MESSAGES[status] || e.message;
|
|
15
|
+
const message = normalizeMessage(data.message || data.error) || generalMessage;
|
|
16
|
+
|
|
17
|
+
return new OrNetworkError({
|
|
18
|
+
message,
|
|
19
|
+
status,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return new Error(e.message);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function normalizeMessage(message: unknown): string | undefined {
|
|
27
|
+
if (typeof message === 'string') {
|
|
28
|
+
return message;
|
|
29
|
+
}
|
|
30
|
+
if (Array.isArray(message)) {
|
|
31
|
+
return message.join('. ');
|
|
32
|
+
}
|
|
33
|
+
}
|