@aws/nx-plugin 0.41.1 → 0.42.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 +1 -0
- package/generators.json +6 -0
- package/package.json +1 -1
- package/sdk/py.d.ts +2 -0
- package/sdk/py.js +3 -1
- package/sdk/py.js.map +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +2 -0
- package/src/py/fast-api/generator.js +3 -10
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/lambda-function/generator.js +4 -15
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +318 -0
- package/src/py/mcp-server/files/Dockerfile.template +18 -0
- package/src/py/mcp-server/files/__init__.py.template +0 -0
- package/src/py/mcp-server/files/http.py.template +4 -0
- package/src/py/mcp-server/files/server.py.template +19 -0
- package/src/py/mcp-server/files/stdio.py.template +4 -0
- package/src/py/mcp-server/generator.d.ts +10 -0
- package/src/py/mcp-server/generator.js +141 -0
- package/src/py/mcp-server/generator.js.map +1 -0
- package/src/py/mcp-server/schema.d.ts +15 -0
- package/src/py/mcp-server/schema.json +33 -0
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +1 -0
- package/src/ts/mcp-server/generator.js +13 -1
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/utils/bundle.d.ts +7 -10
- package/src/utils/bundle.js +26 -4
- package/src/utils/bundle.js.map +1 -1
- package/src/utils/py.d.ts +5 -0
- package/src/utils/py.js +25 -0
- package/src/utils/py.js.map +1 -0
- package/src/utils/versions.d.ts +2 -1
- package/src/utils/versions.js +1 -0
- package/src/utils/versions.js.map +1 -1
package/README.md
CHANGED
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
- `py#project` - Generate a uv based Python project.
|
|
64
64
|
- `py#fast-api` - Generate a FastAPI backend service with [AWS Powertools](https://github.com/aws-powertools/powertools-lambda-python) pre-configured.
|
|
65
65
|
- `py#lambda-function` - Add a lambda function to an existing python project with optional type-safe event sources.
|
|
66
|
+
- `py#mcp-server` - Add a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server to a Python project.
|
|
66
67
|
- `api-connection` - Connect frontend applications to backend APIs.
|
|
67
68
|
- `license` - Automatically manage LICENSE files and source code headers in your workspace.
|
|
68
69
|
|
package/generators.json
CHANGED
|
@@ -163,6 +163,12 @@
|
|
|
163
163
|
"description": "Generates a Terraform project",
|
|
164
164
|
"metric": "g23",
|
|
165
165
|
"guidePages": ["terraform-project"]
|
|
166
|
+
},
|
|
167
|
+
"py#mcp-server": {
|
|
168
|
+
"factory": "./src/py/mcp-server/generator",
|
|
169
|
+
"schema": "./src/py/mcp-server/schema.json",
|
|
170
|
+
"description": "Generate a Python Model Context Protocol (MCP) server for providing context to Large Language Models",
|
|
171
|
+
"metric": "g24"
|
|
166
172
|
}
|
|
167
173
|
}
|
|
168
174
|
}
|
package/package.json
CHANGED
package/sdk/py.d.ts
CHANGED
|
@@ -8,3 +8,5 @@ export { pyFastApiProjectGenerator } from '../src/py/fast-api/generator';
|
|
|
8
8
|
export { PyFastApiProjectGeneratorSchema } from '../src/py/fast-api/schema';
|
|
9
9
|
export { pyLambdaFunctionGenerator } from '../src/py/lambda-function/generator';
|
|
10
10
|
export { PyLambdaFunctionGeneratorSchema } from '../src/py/lambda-function/schema';
|
|
11
|
+
export { pyMcpServerGenerator } from '../src/py/mcp-server/generator';
|
|
12
|
+
export { PyMcpServerGeneratorSchema } from '../src/py/mcp-server/schema';
|
package/sdk/py.js
CHANGED
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.pyLambdaFunctionGenerator = exports.pyFastApiProjectGenerator = exports.pyProjectGenerator = void 0;
|
|
7
|
+
exports.pyMcpServerGenerator = exports.pyLambdaFunctionGenerator = exports.pyFastApiProjectGenerator = exports.pyProjectGenerator = void 0;
|
|
8
8
|
var generator_1 = require("../src/py/project/generator");
|
|
9
9
|
Object.defineProperty(exports, "pyProjectGenerator", { enumerable: true, get: function () { return generator_1.pyProjectGenerator; } });
|
|
10
10
|
var generator_2 = require("../src/py/fast-api/generator");
|
|
11
11
|
Object.defineProperty(exports, "pyFastApiProjectGenerator", { enumerable: true, get: function () { return generator_2.pyFastApiProjectGenerator; } });
|
|
12
12
|
var generator_3 = require("../src/py/lambda-function/generator");
|
|
13
13
|
Object.defineProperty(exports, "pyLambdaFunctionGenerator", { enumerable: true, get: function () { return generator_3.pyLambdaFunctionGenerator; } });
|
|
14
|
+
var generator_4 = require("../src/py/mcp-server/generator");
|
|
15
|
+
Object.defineProperty(exports, "pyMcpServerGenerator", { enumerable: true, get: function () { return generator_4.pyMcpServerGenerator; } });
|
|
14
16
|
//# sourceMappingURL=py.js.map
|
package/sdk/py.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"py.js","sourceRoot":"","sources":["../../../../packages/nx-plugin/sdk/py.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,yDAAiE;AAAxD,+GAAA,kBAAkB,OAAA;AAG3B,0DAAyE;AAAhE,sHAAA,yBAAyB,OAAA;AAGlC,iEAAgF;AAAvE,sHAAA,yBAAyB,OAAA"}
|
|
1
|
+
{"version":3,"file":"py.js","sourceRoot":"","sources":["../../../../packages/nx-plugin/sdk/py.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,yDAAiE;AAAxD,+GAAA,kBAAkB,OAAA;AAG3B,0DAAyE;AAAhE,sHAAA,yBAAyB,OAAA;AAGlC,iEAAgF;AAAvE,sHAAA,yBAAyB,OAAA;AAGlC,4DAAsE;AAA7D,iHAAA,oBAAoB,OAAA"}
|
|
@@ -60,6 +60,8 @@ The following list of generators are what is currently available in the \`@aws/n
|
|
|
60
60
|
|
|
61
61
|
- **terraform#project**: Generates a Terraform project
|
|
62
62
|
|
|
63
|
+
- **py#mcp-server**: Generate a Python Model Context Protocol (MCP) server for providing context to Large Language Models
|
|
64
|
+
|
|
63
65
|
You also have the option of using additional [commmunity plugins](https://nx.dev/plugin-registry) as needed.
|
|
64
66
|
|
|
65
67
|
## Invoking a generator
|
|
@@ -28,7 +28,7 @@ exports.FAST_API_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
|
|
|
28
28
|
* Generates a Python FastAPI project
|
|
29
29
|
*/
|
|
30
30
|
const pyFastApiProjectGenerator = (tree, schema) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
31
|
-
var _a
|
|
31
|
+
var _a;
|
|
32
32
|
yield (0, shared_constructs_1.sharedConstructsGenerator)(tree);
|
|
33
33
|
const { dir, normalizedModuleName, fullyQualifiedName } = (0, generator_1.getPyProjectDetails)(tree, {
|
|
34
34
|
name: schema.name,
|
|
@@ -45,14 +45,7 @@ const pyFastApiProjectGenerator = (tree, schema) => tslib_1.__awaiter(void 0, vo
|
|
|
45
45
|
projectType: 'application',
|
|
46
46
|
});
|
|
47
47
|
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, fullyQualifiedName);
|
|
48
|
-
|
|
49
|
-
projectDir: dir,
|
|
50
|
-
packageName: fullyQualifiedName,
|
|
51
|
-
})), { dependsOn: ['compile'] });
|
|
52
|
-
projectConfig.targets.build.dependsOn = [
|
|
53
|
-
...((_a = projectConfig.targets.build.dependsOn) !== null && _a !== void 0 ? _a : []),
|
|
54
|
-
'bundle',
|
|
55
|
-
];
|
|
48
|
+
(0, bundle_1.addPythonBundleTarget)(projectConfig);
|
|
56
49
|
projectConfig.targets.serve = {
|
|
57
50
|
executor: '@nxlv/python:run-commands',
|
|
58
51
|
options: {
|
|
@@ -152,7 +145,7 @@ const pyFastApiProjectGenerator = (tree, schema) => tslib_1.__awaiter(void 0, vo
|
|
|
152
145
|
'mangum',
|
|
153
146
|
'aws-lambda-powertools',
|
|
154
147
|
'aws-lambda-powertools[tracer]',
|
|
155
|
-
].concat(((
|
|
148
|
+
].concat(((_a = projectToml.project) === null || _a === void 0 ? void 0 : _a.dependencies) || []);
|
|
156
149
|
projectToml['dependency-groups'] = { dev: ['fastapi[standard]>=0.115'] };
|
|
157
150
|
tree.write((0, devkit_1.joinPathFragments)(dir, 'pyproject.toml'), (0, toml_1.stringify)(projectToml));
|
|
158
151
|
(0, nx_1.addGeneratorMetadata)(tree, fullyQualifiedName, exports.FAST_API_GENERATOR_INFO);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/fast-api/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAWoB;AAEpB,oEAAmE;AACnE,oEAAiE;AACjE,0EAA+E;AAC/E,sCAA+C;AAE/C,qEAA0E;AAC1E,yFAGiD;AACjD,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/fast-api/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ const getLambdaFunctionDetails = (tree, schema) => {
|
|
|
36
36
|
* Generates a Python Lambda Function to add to a python project
|
|
37
37
|
*/
|
|
38
38
|
const pyLambdaFunctionGenerator = (tree, schema) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
39
|
-
var _a, _b, _c
|
|
39
|
+
var _a, _b, _c;
|
|
40
40
|
const projectConfig = (0, nx_1.readProjectConfigurationUnqualified)(tree, schema.project);
|
|
41
41
|
const pyProjectPath = (0, devkit_1.joinPathFragments)(projectConfig.root, 'pyproject.toml');
|
|
42
42
|
// Check if the project has a pyproject.toml file
|
|
@@ -71,24 +71,13 @@ const pyLambdaFunctionGenerator = (tree, schema) => tslib_1.__awaiter(void 0, vo
|
|
|
71
71
|
constructFunctionClassName,
|
|
72
72
|
constructFunctionKebabCase, constructHandlerFilePath: normalizedFunctionPath, lambdaFunctionClassName, lambdaFunctionSnakeCase: normalizedFunctionName });
|
|
73
73
|
// Check if the project has a bundle target and if not add it
|
|
74
|
-
|
|
75
|
-
projectConfig.targets.bundle = Object.assign(Object.assign({}, (0, bundle_1.createPythonBundleTarget)({
|
|
76
|
-
projectDir: dir,
|
|
77
|
-
packageName: projectConfig.name,
|
|
78
|
-
})), { dependsOn: ['compile'] });
|
|
79
|
-
}
|
|
80
|
-
if ((_c = projectConfig.targets) === null || _c === void 0 ? void 0 : _c.build) {
|
|
81
|
-
projectConfig.targets.build.dependsOn = [
|
|
82
|
-
...((_d = projectConfig.targets.build.dependsOn) !== null && _d !== void 0 ? _d : []).filter((t) => t !== 'bundle'),
|
|
83
|
-
'bundle',
|
|
84
|
-
];
|
|
85
|
-
}
|
|
74
|
+
(0, bundle_1.addPythonBundleTarget)(projectConfig);
|
|
86
75
|
projectConfig.targets = (0, object_1.sortObjectKeys)(projectConfig.targets);
|
|
87
76
|
(0, devkit_1.updateProjectConfiguration)(tree, projectConfig.name, projectConfig);
|
|
88
77
|
// Generate the lambda handler file
|
|
89
78
|
(0, devkit_1.generateFiles)(tree, // the virtual file system
|
|
90
79
|
(0, devkit_1.joinPathFragments)(__dirname, 'files', 'handler'), // path to the file templates
|
|
91
|
-
(0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, (
|
|
80
|
+
(0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, (_b = schema.functionPath) !== null && _b !== void 0 ? _b : ''), enhancedOptions, { overwriteStrategy: devkit_1.OverwriteStrategy.Overwrite });
|
|
92
81
|
// Generate the lambda handler test file
|
|
93
82
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'tests'), (0, devkit_1.joinPathFragments)(dir, 'tests'), enhancedOptions, { overwriteStrategy: devkit_1.OverwriteStrategy.Overwrite });
|
|
94
83
|
if (!tree.exists((0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'app', 'lambda-functions', `${constructFunctionKebabCase}.ts`))) {
|
|
@@ -112,7 +101,7 @@ const pyLambdaFunctionGenerator = (tree, schema) => tslib_1.__awaiter(void 0, vo
|
|
|
112
101
|
});
|
|
113
102
|
const projectToml = (0, toml_1.parse)(tree.read((0, devkit_1.joinPathFragments)(dir, 'pyproject.toml'), 'utf8'));
|
|
114
103
|
// Check if the project already has the dependencies and add them if not
|
|
115
|
-
const dependencies = ((
|
|
104
|
+
const dependencies = ((_c = projectToml.project) === null || _c === void 0 ? void 0 : _c.dependencies) || [];
|
|
116
105
|
if (!dependencies.includes('aws-lambda-powertools')) {
|
|
117
106
|
dependencies.push('aws-lambda-powertools');
|
|
118
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/lambda-function/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAUoB;AAEpB,oEAAmE;AACnE,oEAAiE;AACjE,sCAA+C;AAE/C,qEAA0E;AAC1E,yFAGiD;AACjD,6CAK2B;AAC3B,yCAAgD;AAChD,+CAA0D;AAC1D,qDAAoD;AACpD,+CAAoD;AACpD,uCAIwB;AACxB,iDAAsE;AACtE,+
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/lambda-function/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`py#mcp-server generator > should match snapshot for BedrockAgentCoreRuntime generated constructs files > agent-core-runtime.ts 1`] = `
|
|
4
|
+
"import {
|
|
5
|
+
Role,
|
|
6
|
+
ServicePrincipal,
|
|
7
|
+
PolicyStatement,
|
|
8
|
+
Effect,
|
|
9
|
+
PolicyDocument,
|
|
10
|
+
} from 'aws-cdk-lib/aws-iam';
|
|
11
|
+
import {
|
|
12
|
+
AwsCustomResource,
|
|
13
|
+
AwsCustomResourcePolicy,
|
|
14
|
+
PhysicalResourceId,
|
|
15
|
+
PhysicalResourceIdReference,
|
|
16
|
+
} from 'aws-cdk-lib/custom-resources';
|
|
17
|
+
import { Construct } from 'constructs';
|
|
18
|
+
import type { AuthorizerConfiguration } from '@aws-sdk/client-bedrock-agentcore-control';
|
|
19
|
+
import { Stack } from 'aws-cdk-lib';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Options for the AgentCoreRuntime construct
|
|
23
|
+
*/
|
|
24
|
+
export interface AgentCoreRuntimeProps {
|
|
25
|
+
runtimeName: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
containerUri: string;
|
|
28
|
+
serverProtocol: 'MCP' | 'HTTP';
|
|
29
|
+
environment?: Record<string, string>;
|
|
30
|
+
authorizerConfiguration?: AuthorizerConfiguration;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* A construct for creating a Bedrock AgentCore Runtime
|
|
35
|
+
*/
|
|
36
|
+
export class AgentCoreRuntime extends Construct {
|
|
37
|
+
public readonly role: Role;
|
|
38
|
+
public readonly arn: string;
|
|
39
|
+
|
|
40
|
+
constructor(scope: Construct, id: string, props: AgentCoreRuntimeProps) {
|
|
41
|
+
super(scope, id);
|
|
42
|
+
|
|
43
|
+
const region = Stack.of(this).region;
|
|
44
|
+
const accountId = Stack.of(this).account;
|
|
45
|
+
|
|
46
|
+
this.role = new Role(this, 'AgentCoreRole', {
|
|
47
|
+
assumedBy: new ServicePrincipal('bedrock-agentcore.amazonaws.com'),
|
|
48
|
+
inlinePolicies: {
|
|
49
|
+
AgentCorePolicy: new PolicyDocument({
|
|
50
|
+
statements: [
|
|
51
|
+
new PolicyStatement({
|
|
52
|
+
sid: 'ECRImageAccess',
|
|
53
|
+
effect: Effect.ALLOW,
|
|
54
|
+
actions: ['ecr:BatchGetImage', 'ecr:GetDownloadUrlForLayer'],
|
|
55
|
+
resources: [\`arn:aws:ecr:\${region}:\${accountId}:repository/*\`],
|
|
56
|
+
}),
|
|
57
|
+
new PolicyStatement({
|
|
58
|
+
effect: Effect.ALLOW,
|
|
59
|
+
actions: ['logs:DescribeLogStreams', 'logs:CreateLogGroup'],
|
|
60
|
+
resources: [
|
|
61
|
+
\`arn:aws:logs:\${region}:\${accountId}:log-group:/aws/bedrock-agentcore/runtimes/*\`,
|
|
62
|
+
],
|
|
63
|
+
}),
|
|
64
|
+
new PolicyStatement({
|
|
65
|
+
effect: Effect.ALLOW,
|
|
66
|
+
actions: ['logs:DescribeLogGroups'],
|
|
67
|
+
resources: [\`arn:aws:logs:\${region}:\${accountId}:log-group:*\`],
|
|
68
|
+
}),
|
|
69
|
+
new PolicyStatement({
|
|
70
|
+
effect: Effect.ALLOW,
|
|
71
|
+
actions: ['logs:CreateLogStream', 'logs:PutLogEvents'],
|
|
72
|
+
resources: [
|
|
73
|
+
\`arn:aws:logs:\${region}:\${accountId}:log-group:/aws/bedrock-agentcore/runtimes/*:log-stream:*\`,
|
|
74
|
+
],
|
|
75
|
+
}),
|
|
76
|
+
new PolicyStatement({
|
|
77
|
+
sid: 'ECRTokenAccess',
|
|
78
|
+
effect: Effect.ALLOW,
|
|
79
|
+
actions: ['ecr:GetAuthorizationToken'],
|
|
80
|
+
resources: ['*'],
|
|
81
|
+
}),
|
|
82
|
+
new PolicyStatement({
|
|
83
|
+
effect: Effect.ALLOW,
|
|
84
|
+
actions: [
|
|
85
|
+
'xray:PutTraceSegments',
|
|
86
|
+
'xray:PutTelemetryRecords',
|
|
87
|
+
'xray:GetSamplingRules',
|
|
88
|
+
'xray:GetSamplingTargets',
|
|
89
|
+
],
|
|
90
|
+
resources: ['*'],
|
|
91
|
+
}),
|
|
92
|
+
new PolicyStatement({
|
|
93
|
+
effect: Effect.ALLOW,
|
|
94
|
+
actions: ['cloudwatch:PutMetricData'],
|
|
95
|
+
resources: ['*'],
|
|
96
|
+
conditions: {
|
|
97
|
+
StringEquals: {
|
|
98
|
+
'cloudwatch:namespace': 'bedrock-agentcore',
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
}),
|
|
102
|
+
new PolicyStatement({
|
|
103
|
+
sid: 'GetAgentAccessToken',
|
|
104
|
+
effect: Effect.ALLOW,
|
|
105
|
+
actions: [
|
|
106
|
+
'bedrock-agentcore:GetWorkloadAccessToken',
|
|
107
|
+
'bedrock-agentcore:GetWorkloadAccessTokenForJWT',
|
|
108
|
+
'bedrock-agentcore:GetWorkloadAccessTokenForUserId',
|
|
109
|
+
],
|
|
110
|
+
resources: [
|
|
111
|
+
\`arn:aws:bedrock-agentcore:\${region}:\${accountId}:workload-identity-directory/default\`,
|
|
112
|
+
\`arn:aws:bedrock-agentcore:\${region}:\${accountId}:workload-identity-directory/default/workload-identity/*\`,
|
|
113
|
+
],
|
|
114
|
+
}),
|
|
115
|
+
new PolicyStatement({
|
|
116
|
+
sid: 'BedrockModelInvocation',
|
|
117
|
+
effect: Effect.ALLOW,
|
|
118
|
+
actions: [
|
|
119
|
+
'bedrock:InvokeModel',
|
|
120
|
+
'bedrock:InvokeModelWithResponseStream',
|
|
121
|
+
],
|
|
122
|
+
resources: [
|
|
123
|
+
'arn:aws:bedrock:*::foundation-model/*',
|
|
124
|
+
\`arn:aws:bedrock:\${region}:\${accountId}:*\`,
|
|
125
|
+
],
|
|
126
|
+
}),
|
|
127
|
+
],
|
|
128
|
+
}),
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
const agentRuntime = new AwsCustomResource(this, 'MCPSeverRuntime', {
|
|
133
|
+
onCreate: {
|
|
134
|
+
service: 'bedrock-agentcore-control',
|
|
135
|
+
action: 'CreateAgentRuntime',
|
|
136
|
+
parameters: {
|
|
137
|
+
agentRuntimeName: props.runtimeName,
|
|
138
|
+
agentRuntimeArtifact: {
|
|
139
|
+
containerConfiguration: {
|
|
140
|
+
containerUri: props.containerUri,
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
networkConfiguration: {
|
|
144
|
+
networkMode: 'PUBLIC',
|
|
145
|
+
},
|
|
146
|
+
protocolConfiguration: {
|
|
147
|
+
serverProtocol: props.serverProtocol,
|
|
148
|
+
},
|
|
149
|
+
roleArn: this.role.roleArn,
|
|
150
|
+
authorizerConfiguration: props.authorizerConfiguration,
|
|
151
|
+
},
|
|
152
|
+
physicalResourceId: PhysicalResourceId.fromResponse('agentRuntimeId'),
|
|
153
|
+
},
|
|
154
|
+
onUpdate: {
|
|
155
|
+
service: 'bedrock-agentcore-control',
|
|
156
|
+
action: 'UpdateAgentRuntime',
|
|
157
|
+
parameters: {
|
|
158
|
+
agentRuntimeId: new PhysicalResourceIdReference(),
|
|
159
|
+
agentRuntimeName: props.runtimeName,
|
|
160
|
+
agentRuntimeArtifact: {
|
|
161
|
+
containerConfiguration: {
|
|
162
|
+
containerUri: props.containerUri,
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
networkConfiguration: {
|
|
166
|
+
networkMode: 'PUBLIC',
|
|
167
|
+
},
|
|
168
|
+
protocolConfiguration: {
|
|
169
|
+
serverProtocol: props.serverProtocol,
|
|
170
|
+
},
|
|
171
|
+
roleArn: this.role.roleArn,
|
|
172
|
+
authorizerConfiguration: props.authorizerConfiguration,
|
|
173
|
+
},
|
|
174
|
+
physicalResourceId: PhysicalResourceId.fromResponse('agentRuntimeId'),
|
|
175
|
+
},
|
|
176
|
+
onDelete: {
|
|
177
|
+
service: 'bedrock-agentcore-control',
|
|
178
|
+
action: 'DeleteAgentRuntime',
|
|
179
|
+
parameters: {
|
|
180
|
+
agentRuntimeId: new PhysicalResourceIdReference(),
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
policy: AwsCustomResourcePolicy.fromStatements([
|
|
184
|
+
new PolicyStatement({
|
|
185
|
+
actions: ['bedrock-agentcore:*'],
|
|
186
|
+
resources: ['*'],
|
|
187
|
+
}),
|
|
188
|
+
new PolicyStatement({
|
|
189
|
+
actions: ['iam:PassRole'],
|
|
190
|
+
resources: [this.role.roleArn],
|
|
191
|
+
}),
|
|
192
|
+
]),
|
|
193
|
+
installLatestAwsSdk: true,
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
this.arn = agentRuntime.getResponseField('agentRuntimeArn');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
"
|
|
200
|
+
`;
|
|
201
|
+
|
|
202
|
+
exports[`py#mcp-server generator > should match snapshot for BedrockAgentCoreRuntime generated constructs files > app-index.ts 1`] = `
|
|
203
|
+
"export * from './mcp-servers/index.js';
|
|
204
|
+
"
|
|
205
|
+
`;
|
|
206
|
+
|
|
207
|
+
exports[`py#mcp-server generator > should match snapshot for BedrockAgentCoreRuntime generated constructs files > core-index.ts 1`] = `
|
|
208
|
+
"export * from './app.js';
|
|
209
|
+
export * from './runtime-config.js';
|
|
210
|
+
"
|
|
211
|
+
`;
|
|
212
|
+
|
|
213
|
+
exports[`py#mcp-server generator > should match snapshot for BedrockAgentCoreRuntime generated constructs files > mcp-server-construct.ts 1`] = `
|
|
214
|
+
"import { DockerImageAsset, Platform } from 'aws-cdk-lib/aws-ecr-assets';
|
|
215
|
+
import { Construct } from 'constructs';
|
|
216
|
+
import { execSync } from 'child_process';
|
|
217
|
+
import * as path from 'path';
|
|
218
|
+
import * as url from 'url';
|
|
219
|
+
import {
|
|
220
|
+
AgentCoreRuntime,
|
|
221
|
+
AgentCoreRuntimeProps,
|
|
222
|
+
} from '../../../core/agent-core/runtime.js';
|
|
223
|
+
|
|
224
|
+
export type SnapshotBedrockServerProps = Omit<
|
|
225
|
+
AgentCoreRuntimeProps,
|
|
226
|
+
'runtimeName' | 'serverProtocol' | 'containerUri'
|
|
227
|
+
>;
|
|
228
|
+
|
|
229
|
+
export class SnapshotBedrockServer extends Construct {
|
|
230
|
+
public readonly dockerImage: DockerImageAsset;
|
|
231
|
+
public readonly agentCoreRuntime: AgentCoreRuntime;
|
|
232
|
+
|
|
233
|
+
constructor(
|
|
234
|
+
scope: Construct,
|
|
235
|
+
id: string,
|
|
236
|
+
props?: SnapshotBedrockServerProps,
|
|
237
|
+
) {
|
|
238
|
+
super(scope, id);
|
|
239
|
+
|
|
240
|
+
this.dockerImage = new DockerImageAsset(this, 'DockerImage', {
|
|
241
|
+
platform: Platform.LINUX_ARM64,
|
|
242
|
+
directory: path.dirname(url.fileURLToPath(new URL(import.meta.url))),
|
|
243
|
+
extraHash: execSync(
|
|
244
|
+
\`docker inspect proj-snapshot-bedrock-server:latest --format '{{.Descriptor.digest}}'\`,
|
|
245
|
+
{ encoding: 'utf-8' },
|
|
246
|
+
).trim(),
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
this.agentCoreRuntime = new AgentCoreRuntime(this, 'AgentCore', {
|
|
250
|
+
runtimeName: 'SnapshotBedrockServer',
|
|
251
|
+
serverProtocol: 'MCP',
|
|
252
|
+
containerUri: this.dockerImage.imageUri,
|
|
253
|
+
...props,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
"
|
|
258
|
+
`;
|
|
259
|
+
|
|
260
|
+
exports[`py#mcp-server generator > should match snapshot for BedrockAgentCoreRuntime generated constructs files > mcp-servers-index.ts 1`] = `
|
|
261
|
+
"export * from './snapshot-bedrock-server/snapshot-bedrock-server.js';
|
|
262
|
+
"
|
|
263
|
+
`;
|
|
264
|
+
|
|
265
|
+
exports[`py#mcp-server generator > should match snapshot for generated files > mcp-server-__init__.py 1`] = `""`;
|
|
266
|
+
|
|
267
|
+
exports[`py#mcp-server generator > should match snapshot for generated files > mcp-server-http.py 1`] = `
|
|
268
|
+
"from .server import mcp
|
|
269
|
+
|
|
270
|
+
if __name__ == "__main__":
|
|
271
|
+
mcp.run(transport="streamable-http")
|
|
272
|
+
"
|
|
273
|
+
`;
|
|
274
|
+
|
|
275
|
+
exports[`py#mcp-server generator > should match snapshot for generated files > mcp-server-server.py 1`] = `
|
|
276
|
+
"from mcp.server.fastmcp import FastMCP
|
|
277
|
+
|
|
278
|
+
mcp = FastMCP(
|
|
279
|
+
name="SnapshotServer",
|
|
280
|
+
host="0.0.0.0",
|
|
281
|
+
stateless_http=True,
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
@mcp.tool(description="Adds two numbers")
|
|
285
|
+
def add(a: int, b: int) -> int:
|
|
286
|
+
"""Add two numbers"""
|
|
287
|
+
return a + b
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
@mcp.resource("example://context", description="Sample Guidance")
|
|
291
|
+
def sample_guidance() -> str:
|
|
292
|
+
return """## Sample Guidance
|
|
293
|
+
|
|
294
|
+
This is some guidance in markdown format!"""
|
|
295
|
+
"
|
|
296
|
+
`;
|
|
297
|
+
|
|
298
|
+
exports[`py#mcp-server generator > should match snapshot for generated files > mcp-server-stdio.py 1`] = `
|
|
299
|
+
"from .server import mcp
|
|
300
|
+
|
|
301
|
+
if __name__ == "__main__":
|
|
302
|
+
mcp.run(transport="stdio")
|
|
303
|
+
"
|
|
304
|
+
`;
|
|
305
|
+
|
|
306
|
+
exports[`py#mcp-server generator > should match snapshot for generated files > updated-pyproject.toml 1`] = `
|
|
307
|
+
"[project]
|
|
308
|
+
name = "proj.test_project"
|
|
309
|
+
version = "0.1.0"
|
|
310
|
+
dependencies = [ "mcp" ]
|
|
311
|
+
|
|
312
|
+
[dependency-groups]
|
|
313
|
+
dev = [ ]
|
|
314
|
+
|
|
315
|
+
[tool.uv]
|
|
316
|
+
dev-dependencies = [ ]
|
|
317
|
+
"
|
|
318
|
+
`;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
FROM public.ecr.aws/docker/library/python:3.12-slim
|
|
2
|
+
|
|
3
|
+
WORKDIR /app
|
|
4
|
+
|
|
5
|
+
# Add AWS Distro for OpenTelemetry for observability
|
|
6
|
+
# https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/observability-configure.html
|
|
7
|
+
RUN pip install aws-opentelemetry-distro>=0.10.0
|
|
8
|
+
|
|
9
|
+
# Copy bundled package
|
|
10
|
+
COPY --from=workspace <%- distDir %>/bundle /app
|
|
11
|
+
|
|
12
|
+
EXPOSE 8000
|
|
13
|
+
|
|
14
|
+
ENV PYTHONPATH=/app
|
|
15
|
+
|
|
16
|
+
# Auto-instrument with AWS Distro for OpenTelemetry
|
|
17
|
+
# https://aws-otel.github.io/docs/getting-started/python-sdk/auto-instr
|
|
18
|
+
CMD ["opentelemetry-instrument", "python", "-m", "<%- moduleName %>.<%- mcpServerNameSnakeCase %>.http"]
|
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from mcp.server.fastmcp import FastMCP
|
|
2
|
+
|
|
3
|
+
mcp = FastMCP(
|
|
4
|
+
name="<%- mcpServerNameClassName %>",
|
|
5
|
+
host="0.0.0.0",
|
|
6
|
+
stateless_http=True,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
@mcp.tool(description="Adds two numbers")
|
|
10
|
+
def add(a: int, b: int) -> int:
|
|
11
|
+
"""Add two numbers"""
|
|
12
|
+
return a + b
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@mcp.resource("example://context", description="Sample Guidance")
|
|
16
|
+
def sample_guidance() -> str:
|
|
17
|
+
return """## Sample Guidance
|
|
18
|
+
|
|
19
|
+
This is some guidance in markdown format!"""
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { GeneratorCallback, Tree } from '@nx/devkit';
|
|
6
|
+
import { PyMcpServerGeneratorSchema } from './schema';
|
|
7
|
+
import { NxGeneratorInfo } from '../../utils/nx';
|
|
8
|
+
export declare const PY_MCP_SERVER_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
|
+
export declare const pyMcpServerGenerator: (tree: Tree, options: PyMcpServerGeneratorSchema) => Promise<GeneratorCallback>;
|
|
10
|
+
export default pyMcpServerGenerator;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pyMcpServerGenerator = exports.PY_MCP_SERVER_GENERATOR_INFO = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
/**
|
|
6
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
8
|
+
*/
|
|
9
|
+
const devkit_1 = require("@nx/devkit");
|
|
10
|
+
const nx_1 = require("../../utils/nx");
|
|
11
|
+
const metrics_1 = require("../../utils/metrics");
|
|
12
|
+
const format_1 = require("../../utils/format");
|
|
13
|
+
const names_1 = require("../../utils/names");
|
|
14
|
+
const py_1 = require("../../utils/py");
|
|
15
|
+
const npm_scope_1 = require("../../utils/npm-scope");
|
|
16
|
+
const agent_core_constructs_1 = require("../../utils/agent-core-constructs/agent-core-constructs");
|
|
17
|
+
const shared_constructs_1 = require("../../utils/shared-constructs");
|
|
18
|
+
const shared_constructs_constants_1 = require("../../utils/shared-constructs-constants");
|
|
19
|
+
const bundle_1 = require("../../utils/bundle");
|
|
20
|
+
const versions_1 = require("../../utils/versions");
|
|
21
|
+
const logger_1 = require("@nxlv/python/src/executors/utils/logger");
|
|
22
|
+
const provider_1 = require("@nxlv/python/src/provider/uv/provider");
|
|
23
|
+
exports.PY_MCP_SERVER_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
|
|
24
|
+
const pyMcpServerGenerator = (tree, options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
25
|
+
var _a, _b, _c, _d, _e, _f;
|
|
26
|
+
const project = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.project);
|
|
27
|
+
const pyProjectPath = (0, devkit_1.joinPathFragments)(project.root, 'pyproject.toml');
|
|
28
|
+
// Check if the project has a pyproject.toml file
|
|
29
|
+
if (!pyProjectPath) {
|
|
30
|
+
throw new Error(`Unsupported project ${options.project}. Expected a Python project (with a pyproject.toml)`);
|
|
31
|
+
}
|
|
32
|
+
if (!project.sourceRoot) {
|
|
33
|
+
throw new Error(`This project does not have a source root. Please add a source root to the project configuration before running this generator.`);
|
|
34
|
+
}
|
|
35
|
+
// Module name is the last part of the source root,
|
|
36
|
+
const sourceParts = project.sourceRoot.split('/');
|
|
37
|
+
const moduleName = sourceParts[sourceParts.length - 1];
|
|
38
|
+
const name = (0, names_1.kebabCase)((_a = options.name) !== null && _a !== void 0 ? _a : `${(0, names_1.kebabCase)(project.name.split('.').pop())}-mcp-server`);
|
|
39
|
+
const mcpServerNameSnakeCase = (0, names_1.toSnakeCase)((_b = options.name) !== null && _b !== void 0 ? _b : 'mcp-server');
|
|
40
|
+
const mcpServerNameClassName = (0, names_1.toClassName)(name);
|
|
41
|
+
const targetSourceDir = (0, devkit_1.joinPathFragments)(project.sourceRoot, mcpServerNameSnakeCase);
|
|
42
|
+
const distDir = (0, devkit_1.joinPathFragments)('dist', project.root);
|
|
43
|
+
// Generate example server
|
|
44
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), targetSourceDir, {
|
|
45
|
+
name,
|
|
46
|
+
mcpServerNameSnakeCase,
|
|
47
|
+
mcpServerNameClassName,
|
|
48
|
+
moduleName,
|
|
49
|
+
distDir,
|
|
50
|
+
}, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
51
|
+
(0, py_1.addDependenciesToPyProjectToml)(tree, project.root, ['mcp']);
|
|
52
|
+
if (options.computeType === 'BedrockAgentCoreRuntime') {
|
|
53
|
+
const dockerImageTag = `${(0, npm_scope_1.getNpmScope)(tree)}-${name}:latest`;
|
|
54
|
+
// Add bundle target
|
|
55
|
+
(0, bundle_1.addPythonBundleTarget)(project, {
|
|
56
|
+
pythonPlatform: 'aarch64-manylinux2014',
|
|
57
|
+
});
|
|
58
|
+
const dockerTargetName = `${name}-docker`;
|
|
59
|
+
// Add a docker target specific to this MCP server
|
|
60
|
+
project.targets[dockerTargetName] = {
|
|
61
|
+
cache: true,
|
|
62
|
+
executor: 'nx:run-commands',
|
|
63
|
+
options: {
|
|
64
|
+
commands: [
|
|
65
|
+
`docker build --platform linux/arm64 -t ${dockerImageTag} ${targetSourceDir} --build-context workspace=.`,
|
|
66
|
+
],
|
|
67
|
+
parallel: false,
|
|
68
|
+
},
|
|
69
|
+
dependsOn: ['bundle'],
|
|
70
|
+
};
|
|
71
|
+
project.targets.docker = Object.assign(Object.assign({}, project.targets.docker), { dependsOn: [
|
|
72
|
+
...((_d = (_c = project.targets.docker) === null || _c === void 0 ? void 0 : _c.dependsOn) !== null && _d !== void 0 ? _d : []).filter((t) => t !== dockerTargetName),
|
|
73
|
+
dockerTargetName,
|
|
74
|
+
] });
|
|
75
|
+
project.targets.build = Object.assign(Object.assign({}, project.targets.build), { dependsOn: [
|
|
76
|
+
...((_f = (_e = project.targets.build) === null || _e === void 0 ? void 0 : _e.dependsOn) !== null && _f !== void 0 ? _f : []).filter((t) => t !== 'docker'),
|
|
77
|
+
'docker',
|
|
78
|
+
] });
|
|
79
|
+
// Add shared constructs
|
|
80
|
+
yield (0, shared_constructs_1.sharedConstructsGenerator)(tree);
|
|
81
|
+
// Ensure common constructs builds after our mcp server project
|
|
82
|
+
(0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'project.json'), (config) => {
|
|
83
|
+
var _a;
|
|
84
|
+
if (!config.targets) {
|
|
85
|
+
config.targets = {};
|
|
86
|
+
}
|
|
87
|
+
if (!config.targets.build) {
|
|
88
|
+
config.targets.build = {};
|
|
89
|
+
}
|
|
90
|
+
config.targets.build.dependsOn = [
|
|
91
|
+
...((_a = config.targets.build.dependsOn) !== null && _a !== void 0 ? _a : []).filter((t) => t !== `${project.name}:build`),
|
|
92
|
+
`${project.name}:build`,
|
|
93
|
+
];
|
|
94
|
+
return config;
|
|
95
|
+
});
|
|
96
|
+
// Add the construct to deploy the mcp server
|
|
97
|
+
(0, agent_core_constructs_1.addMcpServerConstruct)(tree, {
|
|
98
|
+
mcpServerNameKebabCase: name,
|
|
99
|
+
mcpServerNameClassName,
|
|
100
|
+
dockerImageTag,
|
|
101
|
+
});
|
|
102
|
+
(0, devkit_1.addDependenciesToPackageJson)(tree, {}, (0, versions_1.withVersions)(['@aws-sdk/client-bedrock-agentcore-control']));
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// No Dockerfile needed for non-hosted MCP
|
|
106
|
+
tree.delete((0, devkit_1.joinPathFragments)(targetSourceDir, 'Dockerfile'));
|
|
107
|
+
}
|
|
108
|
+
(0, devkit_1.updateProjectConfiguration)(tree, project.name, Object.assign(Object.assign({}, project), { targets: Object.assign(Object.assign({}, project.targets), {
|
|
109
|
+
// Add targets for running the MCP server
|
|
110
|
+
[`${options.name ? name : 'mcp-server'}-serve-stdio`]: {
|
|
111
|
+
executor: 'nx:run-commands',
|
|
112
|
+
options: {
|
|
113
|
+
commands: [`uv run -m ${moduleName}.${mcpServerNameSnakeCase}.stdio`],
|
|
114
|
+
cwd: '{projectRoot}',
|
|
115
|
+
},
|
|
116
|
+
}, [`${options.name ? name : 'mcp-server'}-serve-http`]: {
|
|
117
|
+
executor: 'nx:run-commands',
|
|
118
|
+
options: {
|
|
119
|
+
commands: [`uv run -m ${moduleName}.${mcpServerNameSnakeCase}.http`],
|
|
120
|
+
cwd: '{projectRoot}',
|
|
121
|
+
},
|
|
122
|
+
}, [`${options.name ? name : 'mcp-server'}-inspect`]: {
|
|
123
|
+
executor: 'nx:run-commands',
|
|
124
|
+
options: {
|
|
125
|
+
commands: [
|
|
126
|
+
`mcp-inspector -- uv run -m ${moduleName}.${mcpServerNameSnakeCase}.stdio`,
|
|
127
|
+
],
|
|
128
|
+
cwd: '{projectRoot}',
|
|
129
|
+
},
|
|
130
|
+
} }) }));
|
|
131
|
+
(0, devkit_1.addDependenciesToPackageJson)(tree, {}, (0, versions_1.withVersions)(['@modelcontextprotocol/inspector']));
|
|
132
|
+
yield (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [exports.PY_MCP_SERVER_GENERATOR_INFO]);
|
|
133
|
+
yield (0, format_1.formatFilesInSubtree)(tree);
|
|
134
|
+
return () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
135
|
+
(0, devkit_1.installPackagesTask)(tree);
|
|
136
|
+
yield new provider_1.UVProvider(tree.root, new logger_1.Logger(), tree).install();
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
exports.pyMcpServerGenerator = pyMcpServerGenerator;
|
|
140
|
+
exports.default = exports.pyMcpServerGenerator;
|
|
141
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/mcp-server/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
export type PyMcpServerComputeType = 'None' | 'BedrockAgentCoreRuntime';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* TypeScript types for options defined in schema.json
|
|
9
|
+
* Update this to match schema.json if you make changes.
|
|
10
|
+
*/
|
|
11
|
+
export interface PyMcpServerGeneratorSchema {
|
|
12
|
+
project: string;
|
|
13
|
+
name?: string;
|
|
14
|
+
computeType?: PyMcpServerComputeType;
|
|
15
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/schema",
|
|
3
|
+
"$id": "py#mcp-server",
|
|
4
|
+
"title": "py#mcp-server",
|
|
5
|
+
"description": "Generate a Python Model Context Protocol (MCP) server for providing context to Large Language Models",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"project": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "The project to add an MCP server to",
|
|
11
|
+
"$default": {
|
|
12
|
+
"$source": "argv",
|
|
13
|
+
"index": 0
|
|
14
|
+
},
|
|
15
|
+
"x-prompt": "Select the Python project to add the MCP server to",
|
|
16
|
+
"x-dropdown": "projects"
|
|
17
|
+
},
|
|
18
|
+
"computeType": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "The type of compute to host your MCP server, if any",
|
|
21
|
+
"x-prompt": "How would you like to host your MCP server?",
|
|
22
|
+
"enum": ["None", "BedrockAgentCoreRuntime"],
|
|
23
|
+
"default": "None",
|
|
24
|
+
"x-priority": "important"
|
|
25
|
+
},
|
|
26
|
+
"name": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"description": "The name of your MCP server (default: mcp-server)",
|
|
29
|
+
"x-prompt": "What would you like to call your MCP server? (default: mcp-server)"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"required": ["project"]
|
|
33
|
+
}
|
|
@@ -63,7 +63,11 @@ const tsMcpServerGenerator = (tree, options) => tslib_1.__awaiter(void 0, void 0
|
|
|
63
63
|
// Tracking: https://github.com/modelcontextprotocol/typescript-sdk/issues/164
|
|
64
64
|
// We use a renamed dependency so that v3 and v4 can coexist in projects until the above is resolved
|
|
65
65
|
const deps = (0, versions_1.withVersions)(['@modelcontextprotocol/sdk', 'zod-v3', 'express']);
|
|
66
|
-
let devDeps = (0, versions_1.withVersions)([
|
|
66
|
+
let devDeps = (0, versions_1.withVersions)([
|
|
67
|
+
'tsx',
|
|
68
|
+
'@types/express',
|
|
69
|
+
'@modelcontextprotocol/inspector',
|
|
70
|
+
]);
|
|
67
71
|
// Add hosting based on compute type
|
|
68
72
|
if (options.computeType === 'BedrockAgentCoreRuntime') {
|
|
69
73
|
const dockerImageTag = `${(0, npm_scope_1.getNpmScope)(tree)}-${name}:latest`;
|
|
@@ -121,6 +125,14 @@ const tsMcpServerGenerator = (tree, options) => tslib_1.__awaiter(void 0, void 0
|
|
|
121
125
|
commands: [`tsx --watch ${relativeSourceDir}/http.ts`],
|
|
122
126
|
cwd: '{projectRoot}',
|
|
123
127
|
},
|
|
128
|
+
}, [`${options.name ? name : 'mcp-server'}-inspect`]: {
|
|
129
|
+
executor: 'nx:run-commands',
|
|
130
|
+
options: {
|
|
131
|
+
commands: [
|
|
132
|
+
`mcp-inspector -- tsx --watch ${relativeSourceDir}/stdio.ts`,
|
|
133
|
+
],
|
|
134
|
+
cwd: '{projectRoot}',
|
|
135
|
+
},
|
|
124
136
|
} }) }));
|
|
125
137
|
yield (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [exports.TS_MCP_SERVER_GENERATOR_INFO]);
|
|
126
138
|
yield (0, format_1.formatFilesInSubtree)(tree);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/mcp-server/generator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/mcp-server/generator.ts"],"names":[],"mappings":"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"}
|
package/src/utils/bundle.d.ts
CHANGED
|
@@ -2,18 +2,15 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
6
|
-
export interface
|
|
5
|
+
import { ProjectConfiguration } from '@nx/devkit';
|
|
6
|
+
export interface AddPythonBundleTargetOptions {
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Python platform
|
|
9
|
+
* @default x86_64-manylinux2014
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Python package name
|
|
13
|
-
*/
|
|
14
|
-
packageName: string;
|
|
11
|
+
pythonPlatform?: 'x86_64-manylinux2014' | 'aarch64-manylinux2014';
|
|
15
12
|
}
|
|
16
13
|
/**
|
|
17
|
-
*
|
|
14
|
+
* Adds a bundle target to the given project if it does not exist, and updates the build target to depend on it
|
|
18
15
|
*/
|
|
19
|
-
export declare const
|
|
16
|
+
export declare const addPythonBundleTarget: (project: ProjectConfiguration, opts?: AddPythonBundleTargetOptions) => void;
|
package/src/utils/bundle.js
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
7
|
+
exports.addPythonBundleTarget = void 0;
|
|
8
8
|
/**
|
|
9
9
|
* Create a target for bundling a python project
|
|
10
10
|
*/
|
|
11
|
-
const createPythonBundleTarget = ({ projectDir, packageName, }) => {
|
|
11
|
+
const createPythonBundleTarget = ({ projectDir, packageName, pythonPlatform, }) => {
|
|
12
12
|
return {
|
|
13
13
|
cache: true,
|
|
14
14
|
executor: 'nx:run-commands',
|
|
@@ -16,11 +16,33 @@ const createPythonBundleTarget = ({ projectDir, packageName, }) => {
|
|
|
16
16
|
options: {
|
|
17
17
|
commands: [
|
|
18
18
|
`uv export --frozen --no-dev --no-editable --project ${projectDir} --package ${packageName} -o dist/${projectDir}/bundle/requirements.txt`,
|
|
19
|
-
`uv pip install -n --no-deps --no-installer-metadata --no-compile-bytecode --python-platform
|
|
19
|
+
`uv pip install -n --no-deps --no-installer-metadata --no-compile-bytecode --python-platform ${pythonPlatform} --target dist/${projectDir}/bundle -r dist/${projectDir}/bundle/requirements.txt`,
|
|
20
20
|
],
|
|
21
21
|
parallel: false,
|
|
22
22
|
},
|
|
23
23
|
};
|
|
24
24
|
};
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Adds a bundle target to the given project if it does not exist, and updates the build target to depend on it
|
|
27
|
+
*/
|
|
28
|
+
const addPythonBundleTarget = (project, opts) => {
|
|
29
|
+
var _a, _b, _c, _d;
|
|
30
|
+
if (!project.targets) {
|
|
31
|
+
project.targets = {};
|
|
32
|
+
}
|
|
33
|
+
if (!((_a = project.targets) === null || _a === void 0 ? void 0 : _a.bundle)) {
|
|
34
|
+
project.targets.bundle = Object.assign(Object.assign({}, createPythonBundleTarget({
|
|
35
|
+
projectDir: project.root,
|
|
36
|
+
packageName: project.name,
|
|
37
|
+
pythonPlatform: (_b = opts === null || opts === void 0 ? void 0 : opts.pythonPlatform) !== null && _b !== void 0 ? _b : 'x86_64-manylinux2014',
|
|
38
|
+
})), { dependsOn: ['compile'] });
|
|
39
|
+
}
|
|
40
|
+
if ((_c = project.targets) === null || _c === void 0 ? void 0 : _c.build) {
|
|
41
|
+
project.targets.build.dependsOn = [
|
|
42
|
+
...((_d = project.targets.build.dependsOn) !== null && _d !== void 0 ? _d : []).filter((t) => t !== 'bundle'),
|
|
43
|
+
'bundle',
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.addPythonBundleTarget = addPythonBundleTarget;
|
|
26
48
|
//# sourceMappingURL=bundle.js.map
|
package/src/utils/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/bundle.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/bundle.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAyBH;;GAEG;AACH,MAAM,wBAAwB,GAAG,CAAC,EAChC,UAAU,EACV,WAAW,EACX,cAAc,GACkB,EAAuB,EAAE;IACzD,OAAO;QACL,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,CAAC,wBAAwB,UAAU,SAAS,CAAC;QACtD,OAAO,EAAE;YACP,QAAQ,EAAE;gBACR,uDAAuD,UAAU,cAAc,WAAW,YAAY,UAAU,0BAA0B;gBAC1I,+FAA+F,cAAc,kBAAkB,UAAU,mBAAmB,UAAU,0BAA0B;aACjM;YACD,QAAQ,EAAE,KAAK;SAChB;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACI,MAAM,qBAAqB,GAAG,CACnC,OAA6B,EAC7B,IAAmC,EACnC,EAAE;;IACF,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,CAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAE,CAAC;QAC7B,OAAO,CAAC,OAAO,CAAC,MAAM,mCACjB,wBAAwB,CAAC;YAC1B,UAAU,EAAE,OAAO,CAAC,IAAI;YACxB,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,cAAc,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,mCAAI,sBAAsB;SAC/D,CAAC,KACF,SAAS,EAAE,CAAC,SAAS,CAAC,GACvB,CAAC;IACJ,CAAC;IAED,IAAI,MAAA,OAAO,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG;YAChC,GAAG,CAAC,MAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC;YACxE,QAAQ;SACT,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAzBW,QAAA,qBAAqB,yBAyBhC"}
|
package/src/utils/py.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addDependenciesToPyProjectToml = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
*/
|
|
8
|
+
const toml_1 = require("@iarna/toml");
|
|
9
|
+
const devkit_1 = require("@nx/devkit");
|
|
10
|
+
/**
|
|
11
|
+
* Add dependencies to a pyproject.toml file
|
|
12
|
+
*/
|
|
13
|
+
const addDependenciesToPyProjectToml = (tree, projectRoot, deps) => {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
const projectToml = (0, toml_1.parse)(tree.read((0, devkit_1.joinPathFragments)(projectRoot, 'pyproject.toml'), 'utf8'));
|
|
16
|
+
const newDeps = new Set(deps);
|
|
17
|
+
projectToml.project.dependencies = [
|
|
18
|
+
// TODO: consider parsing into name and version and replacing where name is the same
|
|
19
|
+
...((_b = (_a = projectToml.project) === null || _a === void 0 ? void 0 : _a.dependencies) !== null && _b !== void 0 ? _b : []).filter((dep) => !newDeps.has(dep)),
|
|
20
|
+
...deps,
|
|
21
|
+
];
|
|
22
|
+
tree.write((0, devkit_1.joinPathFragments)(projectRoot, 'pyproject.toml'), (0, toml_1.stringify)(projectToml));
|
|
23
|
+
};
|
|
24
|
+
exports.addDependenciesToPyProjectToml = addDependenciesToPyProjectToml;
|
|
25
|
+
//# sourceMappingURL=py.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"py.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/py.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,sCAA+C;AAC/C,uCAAqD;AAGrD;;GAEG;AACI,MAAM,8BAA8B,GAAG,CAC5C,IAAU,EACV,WAAmB,EACnB,IAAc,EACd,EAAE;;IACF,MAAM,WAAW,GAAG,IAAA,YAAK,EACvB,IAAI,CAAC,IAAI,CAAC,IAAA,0BAAiB,EAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CACjD,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,WAAW,CAAC,OAAO,CAAC,YAAY,GAAG;QACjC,oFAAoF;QACpF,GAAG,CAAC,MAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,YAAY,mCAAI,EAAE,CAAC,CAAC,MAAM,CACjD,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAC3B;QACD,GAAG,IAAI;KACR,CAAC;IACF,IAAI,CAAC,KAAK,CACR,IAAA,0BAAiB,EAAC,WAAW,EAAE,gBAAgB,CAAC,EAChD,IAAA,gBAAS,EAAC,WAAW,CAAC,CACvB,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,8BAA8B,kCAoBzC"}
|
package/src/utils/versions.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare const VERSIONS: {
|
|
|
17
17
|
readonly '@nx/devkit': "~21.0.3";
|
|
18
18
|
readonly '@nx-extend/terraform': "^9.0.0";
|
|
19
19
|
readonly '@modelcontextprotocol/sdk': "^1.11.3";
|
|
20
|
+
readonly '@modelcontextprotocol/inspector': "^0.16.5";
|
|
20
21
|
readonly '@tanstack/react-router': "^1.121.16";
|
|
21
22
|
readonly '@tanstack/router-plugin': "^1.121.16";
|
|
22
23
|
readonly '@tanstack/router-generator': "^1.121.16";
|
|
@@ -61,5 +62,5 @@ export type IVersion = keyof typeof VERSIONS;
|
|
|
61
62
|
* Add versions to the given dependencies
|
|
62
63
|
*/
|
|
63
64
|
export declare const withVersions: (deps: (keyof typeof VERSIONS)[]) => {
|
|
64
|
-
[k: string]: "^0.0.60" | "^3.775.0" | "^3.848.0" | "^2.24.1" | "^6.0.0" | "~21.2.0" | "~21.0.3" | "^9.0.0" | "^1.11.3" | "^1.121.16" | "^1.120.17" | "^1.121.0" | "^3.0.94" | "^3.0.928" | "^1.0.38" | "^5.74.3" | "^5.84.2" | "11.0.0" | "^22.13.13" | "^8.10.148" | "^2.8.18" | "^5.0.3" | "^4.2.0" | "^1.0.20" | "^2.1006.0" | "^2.207.0" | "^3.10.3" | "^10.4.2" | "^2.8.5" | "^0.25.1" | "^5.2.5" | "^5.1.0" | "^2.4.0" | "^3.2.0" | "^3.5.3" | "^0.5.21" | "^4.1.11" | "4.20.1" | "^5.1.4" | "^4.0.14" | "npm:zod@^3";
|
|
65
|
+
[k: string]: "^0.0.60" | "^3.775.0" | "^3.848.0" | "^2.24.1" | "^6.0.0" | "~21.2.0" | "~21.0.3" | "^9.0.0" | "^1.11.3" | "^0.16.5" | "^1.121.16" | "^1.120.17" | "^1.121.0" | "^3.0.94" | "^3.0.928" | "^1.0.38" | "^5.74.3" | "^5.84.2" | "11.0.0" | "^22.13.13" | "^8.10.148" | "^2.8.18" | "^5.0.3" | "^4.2.0" | "^1.0.20" | "^2.1006.0" | "^2.207.0" | "^3.10.3" | "^10.4.2" | "^2.8.5" | "^0.25.1" | "^5.2.5" | "^5.1.0" | "^2.4.0" | "^3.2.0" | "^3.5.3" | "^0.5.21" | "^4.1.11" | "4.20.1" | "^5.1.4" | "^4.0.14" | "npm:zod@^3";
|
|
65
66
|
};
|
package/src/utils/versions.js
CHANGED
|
@@ -20,6 +20,7 @@ exports.VERSIONS = {
|
|
|
20
20
|
'@nx/devkit': '~21.0.3',
|
|
21
21
|
'@nx-extend/terraform': '^9.0.0',
|
|
22
22
|
'@modelcontextprotocol/sdk': '^1.11.3',
|
|
23
|
+
'@modelcontextprotocol/inspector': '^0.16.5',
|
|
23
24
|
'@tanstack/react-router': '^1.121.16',
|
|
24
25
|
'@tanstack/router-plugin': '^1.121.16',
|
|
25
26
|
'@tanstack/router-generator': '^1.121.16',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/versions.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,QAAQ,GAAG;IACtB,iCAAiC,EAAE,SAAS;IAC5C,kCAAkC,EAAE,UAAU;IAC9C,+BAA+B,EAAE,UAAU;IAC3C,+CAA+C,EAAE,UAAU;IAC3D,2CAA2C,EAAE,UAAU;IACvD,+BAA+B,EAAE,SAAS;IAC1C,gCAAgC,EAAE,SAAS;IAC3C,+BAA+B,EAAE,SAAS;IAC1C,+BAA+B,EAAE,SAAS;IAC1C,aAAa,EAAE,QAAQ;IACvB,cAAc,EAAE,SAAS;IACzB,YAAY,EAAE,SAAS;IACvB,sBAAsB,EAAE,QAAQ;IAChC,2BAA2B,EAAE,SAAS;IACtC,wBAAwB,EAAE,WAAW;IACrC,yBAAyB,EAAE,WAAW;IACtC,4BAA4B,EAAE,WAAW;IACzC,+BAA+B,EAAE,WAAW;IAC5C,wBAAwB,EAAE,UAAU;IACpC,qCAAqC,EAAE,SAAS;IAChD,+BAA+B,EAAE,UAAU;IAC3C,kCAAkC,EAAE,SAAS;IAC7C,uBAAuB,EAAE,SAAS;IAClC,gCAAgC,EAAE,SAAS;IAC3C,4BAA4B,EAAE,QAAQ;IACtC,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,QAAQ;IACxB,aAAa,EAAE,WAAW;IAC1B,mBAAmB,EAAE,WAAW;IAChC,aAAa,EAAE,SAAS;IACxB,gBAAgB,EAAE,QAAQ;IAC1B,eAAe,EAAE,QAAQ;IACzB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,UAAU;IACzB,mBAAmB,EAAE,SAAS;IAC9B,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,SAAS;IAClB,wBAAwB,EAAE,QAAQ;IAClC,OAAO,EAAE,QAAQ;IACjB,qBAAqB,EAAE,QAAQ;IAC/B,gBAAgB,EAAE,QAAQ;IAC1B,QAAQ,EAAE,QAAQ;IAClB,oBAAoB,EAAE,QAAQ;IAC9B,oBAAoB,EAAE,SAAS;IAC/B,WAAW,EAAE,SAAS;IACtB,mBAAmB,EAAE,SAAS;IAC9B,GAAG,EAAE,QAAQ,EAAE,kDAAkD;IACjE,qBAAqB,EAAE,QAAQ;IAC/B,GAAG,EAAE,SAAS;IACd,2FAA2F;IAC3F,oEAAoE;IACpE,QAAQ,EAAE,YAAY;CACd,CAAC;AAEX;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,IAA+B,EAAE,EAAE,CAC9D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,gBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AADjD,QAAA,YAAY,gBACqC"}
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/versions.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,QAAQ,GAAG;IACtB,iCAAiC,EAAE,SAAS;IAC5C,kCAAkC,EAAE,UAAU;IAC9C,+BAA+B,EAAE,UAAU;IAC3C,+CAA+C,EAAE,UAAU;IAC3D,2CAA2C,EAAE,UAAU;IACvD,+BAA+B,EAAE,SAAS;IAC1C,gCAAgC,EAAE,SAAS;IAC3C,+BAA+B,EAAE,SAAS;IAC1C,+BAA+B,EAAE,SAAS;IAC1C,aAAa,EAAE,QAAQ;IACvB,cAAc,EAAE,SAAS;IACzB,YAAY,EAAE,SAAS;IACvB,sBAAsB,EAAE,QAAQ;IAChC,2BAA2B,EAAE,SAAS;IACtC,iCAAiC,EAAE,SAAS;IAC5C,wBAAwB,EAAE,WAAW;IACrC,yBAAyB,EAAE,WAAW;IACtC,4BAA4B,EAAE,WAAW;IACzC,+BAA+B,EAAE,WAAW;IAC5C,wBAAwB,EAAE,UAAU;IACpC,qCAAqC,EAAE,SAAS;IAChD,+BAA+B,EAAE,UAAU;IAC3C,kCAAkC,EAAE,SAAS;IAC7C,uBAAuB,EAAE,SAAS;IAClC,gCAAgC,EAAE,SAAS;IAC3C,4BAA4B,EAAE,QAAQ;IACtC,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,QAAQ;IACxB,aAAa,EAAE,WAAW;IAC1B,mBAAmB,EAAE,WAAW;IAChC,aAAa,EAAE,SAAS;IACxB,gBAAgB,EAAE,QAAQ;IAC1B,eAAe,EAAE,QAAQ;IACzB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,UAAU;IACzB,mBAAmB,EAAE,SAAS;IAC9B,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,SAAS;IAClB,wBAAwB,EAAE,QAAQ;IAClC,OAAO,EAAE,QAAQ;IACjB,qBAAqB,EAAE,QAAQ;IAC/B,gBAAgB,EAAE,QAAQ;IAC1B,QAAQ,EAAE,QAAQ;IAClB,oBAAoB,EAAE,QAAQ;IAC9B,oBAAoB,EAAE,SAAS;IAC/B,WAAW,EAAE,SAAS;IACtB,mBAAmB,EAAE,SAAS;IAC9B,GAAG,EAAE,QAAQ,EAAE,kDAAkD;IACjE,qBAAqB,EAAE,QAAQ;IAC/B,GAAG,EAAE,SAAS;IACd,2FAA2F;IAC3F,oEAAoE;IACpE,QAAQ,EAAE,YAAY;CACd,CAAC;AAEX;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,IAA+B,EAAE,EAAE,CAC9D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,gBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AADjD,QAAA,YAAY,gBACqC"}
|