@greensecurity/javascript-sdk 0.17.0 → 0.18.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/bin/mcp-server.js +42 -6
- package/bin/mcp-server.js.map +7 -6
- package/jsr.json +1 -1
- package/lib/config.d.ts +3 -3
- package/lib/config.js +3 -3
- package/mcp-server/extensions.d.ts +9 -0
- package/mcp-server/extensions.d.ts.map +1 -0
- package/mcp-server/extensions.js +6 -0
- package/mcp-server/extensions.js.map +1 -0
- package/mcp-server/mcp-server.js +1 -1
- package/mcp-server/resources.d.ts +9 -4
- package/mcp-server/resources.d.ts.map +1 -1
- package/mcp-server/resources.js +36 -9
- package/mcp-server/resources.js.map +1 -1
- package/mcp-server/server.d.ts.map +1 -1
- package/mcp-server/server.js +6 -1
- package/mcp-server/server.js.map +1 -1
- package/package.json +1 -1
- package/src/lib/config.ts +3 -3
- package/src/mcp-server/extensions.ts +13 -0
- package/src/mcp-server/mcp-server.ts +1 -1
- package/src/mcp-server/resources.ts +75 -14
- package/src/mcp-server/server.ts +16 -1
package/jsr.json
CHANGED
package/lib/config.d.ts
CHANGED
|
@@ -31,8 +31,8 @@ export declare function serverURLFromOptions(options: SDKOptions): URL | null;
|
|
|
31
31
|
export declare const SDK_METADATA: {
|
|
32
32
|
readonly language: "typescript";
|
|
33
33
|
readonly openapiDocVersion: "0.0.3";
|
|
34
|
-
readonly sdkVersion: "0.
|
|
35
|
-
readonly genVersion: "2.
|
|
36
|
-
readonly userAgent: "speakeasy-sdk/typescript 0.
|
|
34
|
+
readonly sdkVersion: "0.18.0";
|
|
35
|
+
readonly genVersion: "2.545.4";
|
|
36
|
+
readonly userAgent: "speakeasy-sdk/typescript 0.18.0 2.545.4 0.0.3 @greensecurity/javascript-sdk";
|
|
37
37
|
};
|
|
38
38
|
//# sourceMappingURL=config.d.ts.map
|
package/lib/config.js
CHANGED
|
@@ -39,8 +39,8 @@ function serverURLFromOptions(options) {
|
|
|
39
39
|
exports.SDK_METADATA = {
|
|
40
40
|
language: "typescript",
|
|
41
41
|
openapiDocVersion: "0.0.3",
|
|
42
|
-
sdkVersion: "0.
|
|
43
|
-
genVersion: "2.
|
|
44
|
-
userAgent: "speakeasy-sdk/typescript 0.
|
|
42
|
+
sdkVersion: "0.18.0",
|
|
43
|
+
genVersion: "2.545.4",
|
|
44
|
+
userAgent: "speakeasy-sdk/typescript 0.18.0 2.545.4 0.0.3 @greensecurity/javascript-sdk",
|
|
45
45
|
};
|
|
46
46
|
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ZodRawShape } from "zod";
|
|
2
|
+
import { ResourceDefinition, ResourceTemplateDefinition } from "./resources.js";
|
|
3
|
+
import { ToolDefinition } from "./tools.js";
|
|
4
|
+
export type Register = {
|
|
5
|
+
tool: <A extends ZodRawShape | undefined>(def: ToolDefinition<A>) => void;
|
|
6
|
+
resource: (def: ResourceDefinition) => void;
|
|
7
|
+
resourceTemplate: (def: ResourceTemplateDefinition) => void;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=extensions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/mcp-server/extensions.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,CAAC,CAAC,SAAS,WAAW,GAAG,SAAS,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC1E,QAAQ,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC5C,gBAAgB,EAAE,CAAC,GAAG,EAAE,0BAA0B,KAAK,IAAI,CAAC;CAC7D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/mcp-server/extensions.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
package/mcp-server/mcp-server.js
CHANGED
|
@@ -22,7 +22,7 @@ const routes = (0, core_1.buildRouteMap)({
|
|
|
22
22
|
exports.app = (0, core_1.buildApplication)(routes, {
|
|
23
23
|
name: "mcp",
|
|
24
24
|
versionInfo: {
|
|
25
|
-
currentVersion: "0.
|
|
25
|
+
currentVersion: "0.18.0",
|
|
26
26
|
},
|
|
27
27
|
});
|
|
28
28
|
(0, core_1.run)(exports.app, node_process_1.default.argv.slice(2), (0, cli_js_1.buildContext)(node_process_1.default));
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
1
|
+
import { McpServer, ResourceMetadata, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
|
|
3
3
|
import { Variables } from "@modelcontextprotocol/sdk/shared/uriTemplate.js";
|
|
4
4
|
import { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
|
|
5
5
|
import { GreenSecurityCore } from "../core.js";
|
|
6
|
-
import {
|
|
6
|
+
import { ConsoleLogger } from "./console-logger.js";
|
|
7
7
|
import { MCPScope } from "./scopes.js";
|
|
8
8
|
export type ReadResourceCallback = (client: GreenSecurityCore, uri: URL, extra: RequestHandlerExtra) => ReadResourceResult | Promise<ReadResourceResult>;
|
|
9
9
|
export type ResourceDefinition = {
|
|
10
10
|
name: string;
|
|
11
|
-
description
|
|
11
|
+
description?: string;
|
|
12
|
+
metadata?: ResourceMetadata;
|
|
12
13
|
scopes?: MCPScope[];
|
|
13
14
|
resource: string;
|
|
14
15
|
read: ReadResourceCallback;
|
|
@@ -17,11 +18,15 @@ export type ReadResourceTemplateCallback = (client: GreenSecurityCore, uri: URL,
|
|
|
17
18
|
export type ResourceTemplateDefinition = {
|
|
18
19
|
name: string;
|
|
19
20
|
description: string;
|
|
21
|
+
metadata?: ResourceMetadata;
|
|
20
22
|
scopes?: MCPScope[];
|
|
21
23
|
resource: ResourceTemplate;
|
|
22
24
|
read: ReadResourceTemplateCallback;
|
|
23
25
|
};
|
|
24
|
-
export declare function formatResult(
|
|
26
|
+
export declare function formatResult(value: unknown, uri: URL, init: {
|
|
27
|
+
mimeType?: string | undefined;
|
|
25
28
|
response?: Response | undefined;
|
|
26
29
|
}): Promise<ReadResourceResult>;
|
|
30
|
+
export declare function createRegisterResource(logger: ConsoleLogger, server: McpServer, sdk: GreenSecurityCore, allowedScopes: Set<MCPScope>): (resource: ResourceDefinition) => void;
|
|
31
|
+
export declare function createRegisterResourceTemplate(logger: ConsoleLogger, server: McpServer, sdk: GreenSecurityCore, allowedScopes: Set<MCPScope>): (resource: ResourceTemplateDefinition) => void;
|
|
27
32
|
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/mcp-server/resources.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/mcp-server/resources.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,MAAM,oBAAoB,GAAG,CACjC,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,mBAAmB,KACvB,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEtD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,oBAAoB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,CACzC,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,mBAAmB,KACvB,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEtD,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,IAAI,EAAE,4BAA4B,CAAC;CACpC,CAAC;AAEF,wBAAsB,YAAY,CAChC,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,GAAG,EACR,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,GACvE,OAAO,CAAC,kBAAkB,CAAC,CAoC7B;AAcD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,iBAAiB,EACtB,aAAa,EAAE,GAAG,CAAC,QAAQ,CAAC,GAC3B,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAqBxC;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,iBAAiB,EACtB,aAAa,EAAE,GAAG,CAAC,QAAQ,CAAC,GAC3B,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,CAqBhD"}
|
package/mcp-server/resources.js
CHANGED
|
@@ -4,19 +4,17 @@
|
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.formatResult = formatResult;
|
|
7
|
+
exports.createRegisterResource = createRegisterResource;
|
|
8
|
+
exports.createRegisterResourceTemplate = createRegisterResourceTemplate;
|
|
7
9
|
const shared_js_1 = require("./shared.js");
|
|
8
|
-
async function formatResult(
|
|
9
|
-
if (!result.ok) {
|
|
10
|
-
throw result.error;
|
|
11
|
-
}
|
|
12
|
-
const { value } = result;
|
|
10
|
+
async function formatResult(value, uri, init) {
|
|
13
11
|
if (typeof value === "undefined") {
|
|
14
12
|
return { contents: [] };
|
|
15
13
|
}
|
|
16
|
-
const { response } = init;
|
|
17
|
-
const mimeType = response?.headers.get("content-type") ?? "";
|
|
18
14
|
let contents = [];
|
|
19
|
-
|
|
15
|
+
const mimeType = init.mimeType ?? init.response?.headers.get("content-type")
|
|
16
|
+
?? "";
|
|
17
|
+
if (mimeType.search(/\bjson\b/g) !== -1) {
|
|
20
18
|
contents = [{ uri: uri.toString(), mimeType, text: JSON.stringify(value) }];
|
|
21
19
|
}
|
|
22
20
|
else if (mimeType.startsWith("text/event-stream")
|
|
@@ -29,7 +27,8 @@ async function formatResult(result, uri, init) {
|
|
|
29
27
|
},
|
|
30
28
|
];
|
|
31
29
|
}
|
|
32
|
-
else if (mimeType.startsWith("text/")
|
|
30
|
+
else if ((mimeType.startsWith("text/") || mimeType.startsWith("application/"))
|
|
31
|
+
&& typeof value === "string") {
|
|
33
32
|
contents = [{ uri: uri.toString(), mimeType, text: value }];
|
|
34
33
|
}
|
|
35
34
|
else if ((0, shared_js_1.isBinaryData)(value)) {
|
|
@@ -48,4 +47,32 @@ async function stringifySSEToJSON(value) {
|
|
|
48
47
|
}
|
|
49
48
|
return JSON.stringify(payloads);
|
|
50
49
|
}
|
|
50
|
+
function createRegisterResource(logger, server, sdk, allowedScopes) {
|
|
51
|
+
return (resource) => {
|
|
52
|
+
const scopes = resource.scopes ?? [];
|
|
53
|
+
if (!scopes.every((s) => allowedScopes.has(s))) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const metadata = {
|
|
57
|
+
...resource.metadata,
|
|
58
|
+
description: resource.description,
|
|
59
|
+
};
|
|
60
|
+
server.resource(resource.name, resource.resource, metadata, async (uri, ctx) => resource.read(sdk, uri, ctx));
|
|
61
|
+
logger.debug("Registered resource", { name: resource.name });
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function createRegisterResourceTemplate(logger, server, sdk, allowedScopes) {
|
|
65
|
+
return (resource) => {
|
|
66
|
+
const scopes = resource.scopes ?? [];
|
|
67
|
+
if (!scopes.every((s) => allowedScopes.has(s))) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const metadata = {
|
|
71
|
+
...resource.metadata,
|
|
72
|
+
description: resource.description,
|
|
73
|
+
};
|
|
74
|
+
server.resource(resource.name, resource.resource, metadata, async (uri, vars, ctx) => resource.read(sdk, uri, vars, ctx));
|
|
75
|
+
logger.debug("Registered resource template", { name: resource.name });
|
|
76
|
+
};
|
|
77
|
+
}
|
|
51
78
|
//# sourceMappingURL=resources.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/mcp-server/resources.ts"],"names":[],"mappings":";AAAA;;GAEG;;
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/mcp-server/resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/mcp-server/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/mcp-server/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD,OAAO,EAAE,QAAQ,EAAa,MAAM,aAAa,CAAC;AAkBlD,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACpC,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IAC9C,SAAS,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;CACjD,aAiDA"}
|
package/mcp-server/server.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.createMCPServer = createMCPServer;
|
|
7
7
|
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
8
8
|
const core_js_1 = require("../core.js");
|
|
9
|
+
const resources_js_1 = require("./resources.js");
|
|
9
10
|
const scopes_js_1 = require("./scopes.js");
|
|
10
11
|
const tools_js_1 = require("./tools.js");
|
|
11
12
|
const organizationsGetFacility_js_1 = require("./tools/organizationsGetFacility.js");
|
|
@@ -26,7 +27,7 @@ const vendorsListVendorJobTitles_js_1 = require("./tools/vendorsListVendorJobTit
|
|
|
26
27
|
function createMCPServer(deps) {
|
|
27
28
|
const server = new mcp_js_1.McpServer({
|
|
28
29
|
name: "GreenSecurity",
|
|
29
|
-
version: "0.
|
|
30
|
+
version: "0.18.0",
|
|
30
31
|
});
|
|
31
32
|
const client = new core_js_1.GreenSecurityCore({
|
|
32
33
|
security: deps.security,
|
|
@@ -36,6 +37,10 @@ function createMCPServer(deps) {
|
|
|
36
37
|
const scopes = new Set(deps.scopes ?? scopes_js_1.mcpScopes);
|
|
37
38
|
const allowedTools = deps.allowedTools && new Set(deps.allowedTools);
|
|
38
39
|
const tool = (0, tools_js_1.createRegisterTool)(deps.logger, server, client, scopes, allowedTools);
|
|
40
|
+
const resource = (0, resources_js_1.createRegisterResource)(deps.logger, server, client, scopes);
|
|
41
|
+
const resourceTemplate = (0, resources_js_1.createRegisterResourceTemplate)(deps.logger, server, client, scopes);
|
|
42
|
+
const register = { tool, resource, resourceTemplate };
|
|
43
|
+
void register; // suppress unused warnings
|
|
39
44
|
tool(vendorsCreateVendorRegistration_js_1.tool$vendorsCreateVendorRegistration);
|
|
40
45
|
tool(vendorsListVendorJobTitles_js_1.tool$vendorsListVendorJobTitles);
|
|
41
46
|
tool(vendorsListVendorCredentials_js_1.tool$vendorsListVendorCredentials);
|
package/mcp-server/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/mcp-server/server.ts"],"names":[],"mappings":";AAAA;;GAEG;;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/mcp-server/server.ts"],"names":[],"mappings":";AAAA;;GAEG;;AA4BH,0CAwDC;AAlFD,oEAAoE;AACpE,wCAA+C;AAG/C,iDAGwB;AACxB,2CAAkD;AAClD,yCAAgD;AAChD,qFAAoF;AACpF,2GAA0G;AAC1G,qGAAoG;AACpG,yHAAwH;AACxH,2EAA0E;AAC1E,qEAAoE;AACpE,yFAAwF;AACxF,iEAAgE;AAChE,+DAA8D;AAC9D,uFAAsF;AACtF,mGAAkG;AAClG,6FAA4F;AAC5F,6FAA4F;AAC5F,uFAAsF;AACtF,yFAAwF;AAExF,SAAgB,eAAe,CAAC,IAO/B;IACC,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,2BAAiB,CAAC;QACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,qBAAS,CAAC,CAAC;IAEjD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,IAAA,6BAAkB,EAC7B,IAAI,CAAC,MAAM,EACX,MAAM,EACN,MAAM,EACN,MAAM,EACN,YAAY,CACb,CAAC;IACF,MAAM,QAAQ,GAAG,IAAA,qCAAsB,EAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7E,MAAM,gBAAgB,GAAG,IAAA,6CAA8B,EACrD,IAAI,CAAC,MAAM,EACX,MAAM,EACN,MAAM,EACN,MAAM,CACP,CAAC;IACF,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IACtD,KAAK,QAAQ,CAAC,CAAC,2BAA2B;IAE1C,IAAI,CAAC,yEAAoC,CAAC,CAAC;IAC3C,IAAI,CAAC,+DAA+B,CAAC,CAAC;IACtC,IAAI,CAAC,mEAAiC,CAAC,CAAC;IACxC,IAAI,CAAC,mEAAiC,CAAC,CAAC;IACxC,IAAI,CAAC,6DAA8B,CAAC,CAAC;IACrC,IAAI,CAAC,iDAAwB,CAAC,CAAC;IAC/B,IAAI,CAAC,2CAAqB,CAAC,CAAC;IAC5B,IAAI,CAAC,+DAA+B,CAAC,CAAC;IACtC,IAAI,CAAC,uCAAmB,CAAC,CAAC;IAC1B,IAAI,CAAC,6DAA8B,CAAC,CAAC;IACrC,IAAI,CAAC,qCAAkB,CAAC,CAAC;IACzB,IAAI,CAAC,iFAAwC,CAAC,CAAC;IAC/C,IAAI,CAAC,2DAA6B,CAAC,CAAC;IACpC,IAAI,CAAC,+FAA+C,CAAC,CAAC;IACtD,IAAI,CAAC,2EAAqC,CAAC,CAAC;IAE5C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/package.json
CHANGED
package/src/lib/config.ts
CHANGED
|
@@ -72,8 +72,8 @@ export function serverURLFromOptions(options: SDKOptions): URL | null {
|
|
|
72
72
|
export const SDK_METADATA = {
|
|
73
73
|
language: "typescript",
|
|
74
74
|
openapiDocVersion: "0.0.3",
|
|
75
|
-
sdkVersion: "0.
|
|
76
|
-
genVersion: "2.
|
|
75
|
+
sdkVersion: "0.18.0",
|
|
76
|
+
genVersion: "2.545.4",
|
|
77
77
|
userAgent:
|
|
78
|
-
"speakeasy-sdk/typescript 0.
|
|
78
|
+
"speakeasy-sdk/typescript 0.18.0 2.545.4 0.0.3 @greensecurity/javascript-sdk",
|
|
79
79
|
} as const;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { ZodRawShape } from "zod";
|
|
6
|
+
import { ResourceDefinition, ResourceTemplateDefinition } from "./resources.js";
|
|
7
|
+
import { ToolDefinition } from "./tools.js";
|
|
8
|
+
|
|
9
|
+
export type Register = {
|
|
10
|
+
tool: <A extends ZodRawShape | undefined>(def: ToolDefinition<A>) => void;
|
|
11
|
+
resource: (def: ResourceDefinition) => void;
|
|
12
|
+
resourceTemplate: (def: ResourceTemplateDefinition) => void;
|
|
13
|
+
};
|
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
McpServer,
|
|
7
|
+
ResourceMetadata,
|
|
8
|
+
ResourceTemplate,
|
|
9
|
+
} from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
10
|
import { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
|
|
7
11
|
import { Variables } from "@modelcontextprotocol/sdk/shared/uriTemplate.js";
|
|
8
12
|
import { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
|
|
9
13
|
import { GreenSecurityCore } from "../core.js";
|
|
10
|
-
import {
|
|
14
|
+
import { ConsoleLogger } from "./console-logger.js";
|
|
11
15
|
import { MCPScope } from "./scopes.js";
|
|
12
16
|
import { isAsyncIterable, isBinaryData, valueToBase64 } from "./shared.js";
|
|
13
17
|
|
|
@@ -19,7 +23,8 @@ export type ReadResourceCallback = (
|
|
|
19
23
|
|
|
20
24
|
export type ResourceDefinition = {
|
|
21
25
|
name: string;
|
|
22
|
-
description
|
|
26
|
+
description?: string;
|
|
27
|
+
metadata?: ResourceMetadata;
|
|
23
28
|
scopes?: MCPScope[];
|
|
24
29
|
resource: string;
|
|
25
30
|
read: ReadResourceCallback;
|
|
@@ -35,30 +40,27 @@ export type ReadResourceTemplateCallback = (
|
|
|
35
40
|
export type ResourceTemplateDefinition = {
|
|
36
41
|
name: string;
|
|
37
42
|
description: string;
|
|
43
|
+
metadata?: ResourceMetadata;
|
|
38
44
|
scopes?: MCPScope[];
|
|
39
45
|
resource: ResourceTemplate;
|
|
40
46
|
read: ReadResourceTemplateCallback;
|
|
41
47
|
};
|
|
42
48
|
|
|
43
49
|
export async function formatResult(
|
|
44
|
-
|
|
50
|
+
value: unknown,
|
|
45
51
|
uri: URL,
|
|
46
|
-
init: { response?: Response | undefined },
|
|
52
|
+
init: { mimeType?: string | undefined; response?: Response | undefined },
|
|
47
53
|
): Promise<ReadResourceResult> {
|
|
48
|
-
if (!result.ok) {
|
|
49
|
-
throw result.error;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const { value } = result;
|
|
53
54
|
if (typeof value === "undefined") {
|
|
54
55
|
return { contents: [] };
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
const { response } = init;
|
|
58
|
-
const mimeType = response?.headers.get("content-type") ?? "";
|
|
59
58
|
let contents: ReadResourceResult["contents"] = [];
|
|
60
59
|
|
|
61
|
-
|
|
60
|
+
const mimeType = init.mimeType ?? init.response?.headers.get("content-type")
|
|
61
|
+
?? "";
|
|
62
|
+
|
|
63
|
+
if (mimeType.search(/\bjson\b/g) !== -1) {
|
|
62
64
|
contents = [{ uri: uri.toString(), mimeType, text: JSON.stringify(value) }];
|
|
63
65
|
} else if (
|
|
64
66
|
mimeType.startsWith("text/event-stream")
|
|
@@ -71,7 +73,10 @@ export async function formatResult(
|
|
|
71
73
|
text: await stringifySSEToJSON(value),
|
|
72
74
|
},
|
|
73
75
|
];
|
|
74
|
-
} else if (
|
|
76
|
+
} else if (
|
|
77
|
+
(mimeType.startsWith("text/") || mimeType.startsWith("application/"))
|
|
78
|
+
&& typeof value === "string"
|
|
79
|
+
) {
|
|
75
80
|
contents = [{ uri: uri.toString(), mimeType, text: value }];
|
|
76
81
|
} else if (isBinaryData(value)) {
|
|
77
82
|
const blob = await valueToBase64(value);
|
|
@@ -94,3 +99,59 @@ async function stringifySSEToJSON(
|
|
|
94
99
|
|
|
95
100
|
return JSON.stringify(payloads);
|
|
96
101
|
}
|
|
102
|
+
|
|
103
|
+
export function createRegisterResource(
|
|
104
|
+
logger: ConsoleLogger,
|
|
105
|
+
server: McpServer,
|
|
106
|
+
sdk: GreenSecurityCore,
|
|
107
|
+
allowedScopes: Set<MCPScope>,
|
|
108
|
+
): (resource: ResourceDefinition) => void {
|
|
109
|
+
return (resource: ResourceDefinition): void => {
|
|
110
|
+
const scopes = resource.scopes ?? [];
|
|
111
|
+
if (!scopes.every((s: MCPScope) => allowedScopes.has(s))) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const metadata: ResourceMetadata = {
|
|
116
|
+
...resource.metadata,
|
|
117
|
+
description: resource.description,
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
server.resource(
|
|
121
|
+
resource.name,
|
|
122
|
+
resource.resource,
|
|
123
|
+
metadata,
|
|
124
|
+
async (uri, ctx) => resource.read(sdk, uri, ctx),
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
logger.debug("Registered resource", { name: resource.name });
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function createRegisterResourceTemplate(
|
|
132
|
+
logger: ConsoleLogger,
|
|
133
|
+
server: McpServer,
|
|
134
|
+
sdk: GreenSecurityCore,
|
|
135
|
+
allowedScopes: Set<MCPScope>,
|
|
136
|
+
): (resource: ResourceTemplateDefinition) => void {
|
|
137
|
+
return (resource: ResourceTemplateDefinition): void => {
|
|
138
|
+
const scopes = resource.scopes ?? [];
|
|
139
|
+
if (!scopes.every((s: MCPScope) => allowedScopes.has(s))) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const metadata: ResourceMetadata = {
|
|
144
|
+
...resource.metadata,
|
|
145
|
+
description: resource.description,
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
server.resource(
|
|
149
|
+
resource.name,
|
|
150
|
+
resource.resource,
|
|
151
|
+
metadata,
|
|
152
|
+
async (uri, vars, ctx) => resource.read(sdk, uri, vars, ctx),
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
logger.debug("Registered resource template", { name: resource.name });
|
|
156
|
+
};
|
|
157
|
+
}
|
package/src/mcp-server/server.ts
CHANGED
|
@@ -6,6 +6,10 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
6
6
|
import { GreenSecurityCore } from "../core.js";
|
|
7
7
|
import { SDKOptions } from "../lib/config.js";
|
|
8
8
|
import type { ConsoleLogger } from "./console-logger.js";
|
|
9
|
+
import {
|
|
10
|
+
createRegisterResource,
|
|
11
|
+
createRegisterResourceTemplate,
|
|
12
|
+
} from "./resources.js";
|
|
9
13
|
import { MCPScope, mcpScopes } from "./scopes.js";
|
|
10
14
|
import { createRegisterTool } from "./tools.js";
|
|
11
15
|
import { tool$organizationsGetFacility } from "./tools/organizationsGetFacility.js";
|
|
@@ -34,7 +38,7 @@ export function createMCPServer(deps: {
|
|
|
34
38
|
}) {
|
|
35
39
|
const server = new McpServer({
|
|
36
40
|
name: "GreenSecurity",
|
|
37
|
-
version: "0.
|
|
41
|
+
version: "0.18.0",
|
|
38
42
|
});
|
|
39
43
|
|
|
40
44
|
const client = new GreenSecurityCore({
|
|
@@ -42,7 +46,9 @@ export function createMCPServer(deps: {
|
|
|
42
46
|
serverURL: deps.serverURL,
|
|
43
47
|
serverIdx: deps.serverIdx,
|
|
44
48
|
});
|
|
49
|
+
|
|
45
50
|
const scopes = new Set(deps.scopes ?? mcpScopes);
|
|
51
|
+
|
|
46
52
|
const allowedTools = deps.allowedTools && new Set(deps.allowedTools);
|
|
47
53
|
const tool = createRegisterTool(
|
|
48
54
|
deps.logger,
|
|
@@ -51,6 +57,15 @@ export function createMCPServer(deps: {
|
|
|
51
57
|
scopes,
|
|
52
58
|
allowedTools,
|
|
53
59
|
);
|
|
60
|
+
const resource = createRegisterResource(deps.logger, server, client, scopes);
|
|
61
|
+
const resourceTemplate = createRegisterResourceTemplate(
|
|
62
|
+
deps.logger,
|
|
63
|
+
server,
|
|
64
|
+
client,
|
|
65
|
+
scopes,
|
|
66
|
+
);
|
|
67
|
+
const register = { tool, resource, resourceTemplate };
|
|
68
|
+
void register; // suppress unused warnings
|
|
54
69
|
|
|
55
70
|
tool(tool$vendorsCreateVendorRegistration);
|
|
56
71
|
tool(tool$vendorsListVendorJobTitles);
|