@aws/nx-plugin 0.39.3 → 0.40.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/package.json +2 -2
- package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/py/fast-api/generator.js +1 -2
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/project/generator.js +2 -0
- package/src/py/project/generator.js.map +1 -1
- package/src/ts/lambda-function/generator.js +8 -34
- package/src/ts/lambda-function/generator.js.map +1 -1
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +369 -12
- package/src/ts/mcp-server/files/Dockerfile.template +16 -0
- package/src/ts/mcp-server/files/http.ts.template +85 -0
- package/src/ts/mcp-server/files/index.ts.template +1 -17
- package/src/ts/mcp-server/files/stdio.ts.template +17 -0
- package/src/ts/mcp-server/generator.js +68 -12
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/mcp-server/schema.d.ts +3 -0
- package/src/ts/mcp-server/schema.json +8 -0
- package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +105 -11
- package/src/ts/react-website/cognito-auth/generator.js +3 -0
- package/src/ts/react-website/cognito-auth/generator.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +14 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.js +28 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -0
- package/src/utils/agent-core-constructs/files/app/mcp-servers/__mcpServerNameKebabCase__/Dockerfile.template +1 -0
- package/src/utils/agent-core-constructs/files/app/mcp-servers/__mcpServerNameKebabCase__/__mcpServerNameKebabCase__.ts.template +38 -0
- package/src/utils/agent-core-constructs/files/core/agent-core/runtime.ts.template +195 -0
- package/src/utils/api-constructs/api-constructs.d.ts +1 -1
- package/src/utils/api-constructs/files/app/apis/http/__apiNameKebabCase__.ts.template +1 -1
- package/src/utils/api-constructs/files/app/apis/rest/__apiNameKebabCase__.ts.template +1 -1
- package/src/utils/esbuild.d.ts +15 -0
- package/src/utils/esbuild.js +46 -0
- package/src/utils/esbuild.js.map +1 -0
- package/src/utils/versions.d.ts +5 -2
- package/src/utils/versions.js +4 -1
- package/src/utils/versions.js.map +1 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createServer } from './server<% if (esm) { %>.js<% } %>';
|
|
3
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
4
|
+
import express, { Request, Response } from 'express';
|
|
5
|
+
|
|
6
|
+
const PORT = 8000;
|
|
7
|
+
|
|
8
|
+
const app = express();
|
|
9
|
+
app.use(express.json());
|
|
10
|
+
|
|
11
|
+
app.post('/mcp', async (req: Request, res: Response) => {
|
|
12
|
+
try {
|
|
13
|
+
const server = createServer();
|
|
14
|
+
const transport: StreamableHTTPServerTransport =
|
|
15
|
+
new StreamableHTTPServerTransport({
|
|
16
|
+
sessionIdGenerator: undefined,
|
|
17
|
+
});
|
|
18
|
+
res.on('close', () => {
|
|
19
|
+
console.log('Request closed');
|
|
20
|
+
transport.close();
|
|
21
|
+
server.close();
|
|
22
|
+
});
|
|
23
|
+
await server.connect(transport);
|
|
24
|
+
await transport.handleRequest(req, res, {
|
|
25
|
+
...req.body,
|
|
26
|
+
// AgentCore pings with null parameters where the MCP SDK expects an empty object
|
|
27
|
+
params: req.body.method === 'ping' ? {} : req.body.params,
|
|
28
|
+
});
|
|
29
|
+
} catch (error) {
|
|
30
|
+
console.error('Error handling MCP request:', error);
|
|
31
|
+
if (!res.headersSent) {
|
|
32
|
+
res.status(500).json({
|
|
33
|
+
jsonrpc: '2.0',
|
|
34
|
+
error: {
|
|
35
|
+
code: -32603,
|
|
36
|
+
message: 'Internal server error',
|
|
37
|
+
},
|
|
38
|
+
id: null,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// SSE notifications not supported in stateless mode
|
|
45
|
+
app.get('/mcp', async (req: Request, res: Response) => {
|
|
46
|
+
console.log('Received GET MCP request');
|
|
47
|
+
res.writeHead(405).end(
|
|
48
|
+
JSON.stringify({
|
|
49
|
+
jsonrpc: '2.0',
|
|
50
|
+
error: {
|
|
51
|
+
code: -32000,
|
|
52
|
+
message: 'Method not allowed.',
|
|
53
|
+
},
|
|
54
|
+
id: null,
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// Session termination not needed in stateless mode
|
|
60
|
+
app.delete('/mcp', async (req: Request, res: Response) => {
|
|
61
|
+
console.log('Received DELETE MCP request');
|
|
62
|
+
res.writeHead(405).end(
|
|
63
|
+
JSON.stringify({
|
|
64
|
+
jsonrpc: '2.0',
|
|
65
|
+
error: {
|
|
66
|
+
code: -32000,
|
|
67
|
+
message: 'Method not allowed.',
|
|
68
|
+
},
|
|
69
|
+
id: null,
|
|
70
|
+
}),
|
|
71
|
+
);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// Start the server
|
|
75
|
+
void (async () => {
|
|
76
|
+
app.listen(PORT, (error) => {
|
|
77
|
+
if (error) {
|
|
78
|
+
console.error('Failed to start server:', error);
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
console.log(
|
|
82
|
+
`MCP Stateless Streamable HTTP Server listening on port ${PORT}`,
|
|
83
|
+
);
|
|
84
|
+
});
|
|
85
|
+
})();
|
|
@@ -1,17 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
-
import { createServer } from './server<% if (esm) { %>.js<% } %>';
|
|
4
|
-
|
|
5
|
-
export const startMcpServer = async () => {
|
|
6
|
-
const transport = new StdioServerTransport();
|
|
7
|
-
await createServer().connect(transport);
|
|
8
|
-
console.error('MCP Server listening on STDIO');
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
void (async () => {
|
|
12
|
-
try {
|
|
13
|
-
await startMcpServer();
|
|
14
|
-
} catch (e) {
|
|
15
|
-
console.error(e);
|
|
16
|
-
}
|
|
17
|
-
})();
|
|
1
|
+
export * from './server<% if (esm) { %>.js<% } %>';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { createServer } from './server<% if (esm) { %>.js<% } %>';
|
|
4
|
+
|
|
5
|
+
export const startMcpServer = async () => {
|
|
6
|
+
const transport = new StdioServerTransport();
|
|
7
|
+
await createServer().connect(transport);
|
|
8
|
+
console.error('MCP Server listening on STDIO');
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
void (async () => {
|
|
12
|
+
try {
|
|
13
|
+
await startMcpServer();
|
|
14
|
+
} catch (e) {
|
|
15
|
+
console.error(e);
|
|
16
|
+
}
|
|
17
|
+
})();
|
|
@@ -12,6 +12,11 @@ const metrics_1 = require("../../utils/metrics");
|
|
|
12
12
|
const format_1 = require("../../utils/format");
|
|
13
13
|
const versions_1 = require("../../utils/versions");
|
|
14
14
|
const names_1 = require("../../utils/names");
|
|
15
|
+
const shared_constructs_1 = require("../../utils/shared-constructs");
|
|
16
|
+
const agent_core_constructs_1 = require("../../utils/agent-core-constructs/agent-core-constructs");
|
|
17
|
+
const shared_constructs_constants_1 = require("../../utils/shared-constructs-constants");
|
|
18
|
+
const npm_scope_1 = require("../../utils/npm-scope");
|
|
19
|
+
const esbuild_1 = require("../../utils/esbuild");
|
|
15
20
|
exports.TS_MCP_SERVER_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
|
|
16
21
|
const tsMcpServerGenerator = (tree, options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
17
22
|
var _a, _b;
|
|
@@ -23,6 +28,7 @@ const tsMcpServerGenerator = (tree, options) => tslib_1.__awaiter(void 0, void 0
|
|
|
23
28
|
const name = (0, names_1.kebabCase)((_a = options.name) !== null && _a !== void 0 ? _a : defaultName);
|
|
24
29
|
const targetSourceDir = (0, devkit_1.joinPathFragments)((_b = project.sourceRoot) !== null && _b !== void 0 ? _b : `${project.root}/src`, options.name ? name : 'mcp-server');
|
|
25
30
|
const relativeSourceDir = targetSourceDir.replace(project.root + '/', './');
|
|
31
|
+
const distDir = (0, devkit_1.joinPathFragments)('dist', project.root);
|
|
26
32
|
// Create a package.json if one doesn't exist, since we want to add the server as a bin target
|
|
27
33
|
const projectPackageJsonPath = (0, devkit_1.joinPathFragments)(project.root, 'package.json');
|
|
28
34
|
if (!tree.exists(projectPackageJsonPath)) {
|
|
@@ -36,33 +42,83 @@ const tsMcpServerGenerator = (tree, options) => tslib_1.__awaiter(void 0, void 0
|
|
|
36
42
|
// We support commonjs here because nx plugins must be commonjs
|
|
37
43
|
// https://github.com/nrwl/nx/issues/15682
|
|
38
44
|
const esm = (0, devkit_1.readJson)(tree, projectPackageJsonPath).type === 'module';
|
|
39
|
-
// Add a target for running the MCP server
|
|
45
|
+
// Add a target for running the MCP server with stdio transport
|
|
46
|
+
// This allows for the project to be published to npm and then configured with npx, ie:
|
|
47
|
+
// npx -p my-package mcp-server
|
|
40
48
|
(0, devkit_1.updateJson)(tree, projectPackageJsonPath, (pkg) => {
|
|
41
49
|
var _a;
|
|
42
50
|
(_a = pkg.bin) !== null && _a !== void 0 ? _a : (pkg.bin = {});
|
|
43
|
-
pkg.bin[name] = `${relativeSourceDir}/
|
|
51
|
+
pkg.bin[name] = `${relativeSourceDir}/stdio.js`;
|
|
44
52
|
return pkg;
|
|
45
53
|
});
|
|
54
|
+
// Generate example server
|
|
55
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), targetSourceDir, {
|
|
56
|
+
name,
|
|
57
|
+
esm,
|
|
58
|
+
distDir,
|
|
59
|
+
}, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
46
60
|
// Add dependencies
|
|
47
61
|
// Note here we depend on zod v3 (default zod is v4 for all other generators)
|
|
48
62
|
// Zod v3 is needed since the MCP SDK doesn't yet support v4 (or both v3 and v4 via standard schema)
|
|
49
63
|
// Tracking: https://github.com/modelcontextprotocol/typescript-sdk/issues/164
|
|
50
64
|
// We use a renamed dependency so that v3 and v4 can coexist in projects until the above is resolved
|
|
51
|
-
const deps = (0, versions_1.withVersions)(['@modelcontextprotocol/sdk', 'zod-v3']);
|
|
52
|
-
|
|
65
|
+
const deps = (0, versions_1.withVersions)(['@modelcontextprotocol/sdk', 'zod-v3', 'express']);
|
|
66
|
+
let devDeps = (0, versions_1.withVersions)(['tsx', '@types/express']);
|
|
67
|
+
// Add hosting based on compute type
|
|
68
|
+
if (options.computeType === 'BedrockAgentCoreRuntime') {
|
|
69
|
+
const dockerImageTag = `${(0, npm_scope_1.getNpmScope)(tree)}-${name}:latest`;
|
|
70
|
+
// Add an esbuild bundle target
|
|
71
|
+
(0, esbuild_1.addEsbuildBundleTarget)(project, {
|
|
72
|
+
bundleTargetName: `${name}-bundle`,
|
|
73
|
+
targetFilePath: `${targetSourceDir}/http.ts`,
|
|
74
|
+
postBundleCommands: [
|
|
75
|
+
`docker build -t ${dockerImageTag} ${targetSourceDir} --build-context workspace=.`,
|
|
76
|
+
],
|
|
77
|
+
});
|
|
78
|
+
// Add shared constructs
|
|
79
|
+
yield (0, shared_constructs_1.sharedConstructsGenerator)(tree);
|
|
80
|
+
// Ensure common constructs builds after our mcp server project
|
|
81
|
+
(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) => {
|
|
82
|
+
var _a;
|
|
83
|
+
if (!config.targets) {
|
|
84
|
+
config.targets = {};
|
|
85
|
+
}
|
|
86
|
+
if (!config.targets.build) {
|
|
87
|
+
config.targets.build = {};
|
|
88
|
+
}
|
|
89
|
+
config.targets.build.dependsOn = [
|
|
90
|
+
...((_a = config.targets.build.dependsOn) !== null && _a !== void 0 ? _a : []).filter((t) => t !== `${project.name}:build`),
|
|
91
|
+
`${project.name}:build`,
|
|
92
|
+
];
|
|
93
|
+
return config;
|
|
94
|
+
});
|
|
95
|
+
// Add the construct to deploy the mcp server
|
|
96
|
+
(0, agent_core_constructs_1.addMcpServerConstruct)(tree, {
|
|
97
|
+
mcpServerNameKebabCase: name,
|
|
98
|
+
mcpServerNameClassName: (0, names_1.toClassName)(name),
|
|
99
|
+
dockerImageTag,
|
|
100
|
+
});
|
|
101
|
+
// Add additional dependencies
|
|
102
|
+
devDeps = Object.assign(Object.assign({}, devDeps), (0, versions_1.withVersions)(['@aws-sdk/client-bedrock-agentcore-control', 'esbuild']));
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// No Dockerfile needed for non-hosted MCP
|
|
106
|
+
tree.delete((0, devkit_1.joinPathFragments)(targetSourceDir, 'Dockerfile'));
|
|
107
|
+
}
|
|
53
108
|
(0, devkit_1.addDependenciesToPackageJson)(tree, deps, devDeps);
|
|
54
109
|
(0, devkit_1.addDependenciesToPackageJson)(tree, deps, devDeps, projectPackageJsonPath);
|
|
55
|
-
// Generate example server
|
|
56
|
-
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), targetSourceDir, {
|
|
57
|
-
name,
|
|
58
|
-
esm,
|
|
59
|
-
}, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
60
110
|
(0, devkit_1.updateProjectConfiguration)(tree, project.name, Object.assign(Object.assign({}, project), { targets: Object.assign(Object.assign({}, project.targets), {
|
|
61
|
-
// Add
|
|
62
|
-
[`${options.name ? name : 'mcp-server'}-serve`]: {
|
|
111
|
+
// Add targets for running the MCP server
|
|
112
|
+
[`${options.name ? name : 'mcp-server'}-serve-stdio`]: {
|
|
113
|
+
executor: 'nx:run-commands',
|
|
114
|
+
options: {
|
|
115
|
+
commands: [`tsx --watch ${relativeSourceDir}/stdio.ts`],
|
|
116
|
+
cwd: '{projectRoot}',
|
|
117
|
+
},
|
|
118
|
+
}, [`${options.name ? name : 'mcp-server'}-serve-http`]: {
|
|
63
119
|
executor: 'nx:run-commands',
|
|
64
120
|
options: {
|
|
65
|
-
commands: [`tsx --watch ${relativeSourceDir}/
|
|
121
|
+
commands: [`tsx --watch ${relativeSourceDir}/http.ts`],
|
|
66
122
|
cwd: '{projectRoot}',
|
|
67
123
|
},
|
|
68
124
|
} }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/mcp-server/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/mcp-server/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAaoB;AAEpB,uCAIwB;AACxB,iDAAsE;AACtE,+CAA0D;AAC1D,mDAAoD;AACpD,6CAA2D;AAC3D,qEAA0E;AAC1E,mGAAgG;AAChG,yFAGiD;AACjD,qDAAoD;AACpD,iDAA6D;AAEhD,QAAA,4BAA4B,GACvC,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAExB,MAAM,oBAAoB,GAAG,CAClC,IAAU,EACV,OAAmC,EACP,EAAE;;IAC9B,MAAM,OAAO,GAAG,IAAA,wCAAmC,EAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3E,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAA,0BAAiB,EAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CACb,uBAAuB,OAAO,CAAC,OAAO,wDAAwD,CAC/F,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,IAAA,iBAAS,EAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC;IAC7E,MAAM,IAAI,GAAG,IAAA,iBAAS,EAAC,MAAA,OAAO,CAAC,IAAI,mCAAI,WAAW,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,IAAA,0BAAiB,EACvC,MAAA,OAAO,CAAC,UAAU,mCAAI,GAAG,OAAO,CAAC,IAAI,MAAM,EAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CACnC,CAAC;IACF,MAAM,iBAAiB,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,IAAA,0BAAiB,EAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD,8FAA8F;IAC9F,MAAM,sBAAsB,GAAG,IAAA,0BAAiB,EAC9C,OAAO,CAAC,IAAI,EACZ,cAAc,CACf,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACzC,0CAA0C;QAC1C,IAAA,kBAAS,EAAC,IAAI,EAAE,sBAAsB,EAAE;YACtC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED,qFAAqF;IACrF,+DAA+D;IAC/D,0CAA0C;IAC1C,MAAM,GAAG,GAAG,IAAA,iBAAQ,EAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC;IAErE,+DAA+D;IAC/D,uFAAuF;IACvF,+BAA+B;IAC/B,IAAA,mBAAU,EAAC,IAAI,EAAE,sBAAsB,EAAE,CAAC,GAAG,EAAE,EAAE;;QAC/C,MAAA,GAAG,CAAC,GAAG,oCAAP,GAAG,CAAC,GAAG,GAAK,EAAE,EAAC;QACf,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,iBAAiB,WAAW,CAAC;QAChD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,CAAC,EACrC,eAAe,EACf;QACE,IAAI;QACJ,GAAG;QACH,OAAO;KACR,EACD,EAAE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY,EAAE,CACtD,CAAC;IAEF,mBAAmB;IACnB,6EAA6E;IAC7E,oGAAoG;IACpG,8EAA8E;IAC9E,oGAAoG;IACpG,MAAM,IAAI,GAAG,IAAA,uBAAY,EAAC,CAAC,2BAA2B,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9E,IAAI,OAAO,GAAG,IAAA,uBAAY,EAAC,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEtD,oCAAoC;IACpC,IAAI,OAAO,CAAC,WAAW,KAAK,yBAAyB,EAAE,CAAC;QACtD,MAAM,cAAc,GAAG,GAAG,IAAA,uBAAW,EAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;QAE7D,+BAA+B;QAC/B,IAAA,gCAAsB,EAAC,OAAO,EAAE;YAC9B,gBAAgB,EAAE,GAAG,IAAI,SAAS;YAClC,cAAc,EAAE,GAAG,eAAe,UAAU;YAC5C,kBAAkB,EAAE;gBAClB,mBAAmB,cAAc,IAAI,eAAe,8BAA8B;aACnF;SACF,CAAC,CAAC;QAEH,wBAAwB;QACxB,MAAM,IAAA,6CAAyB,EAAC,IAAI,CAAC,CAAC;QAEtC,+DAA+D;QAC/D,IAAA,mBAAU,EACR,IAAI,EACJ,IAAA,0BAAiB,EAAC,0CAAY,EAAE,mDAAqB,EAAE,cAAc,CAAC,EACtE,CAAC,MAA4B,EAAE,EAAE;;YAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC1B,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;YAC5B,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG;gBAC/B,GAAG,CAAC,MAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,MAAM,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,QAAQ,CACrC;gBACD,GAAG,OAAO,CAAC,IAAI,QAAQ;aACxB,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC,CACF,CAAC;QAEF,6CAA6C;QAC7C,IAAA,6CAAqB,EAAC,IAAI,EAAE;YAC1B,sBAAsB,EAAE,IAAI;YAC5B,sBAAsB,EAAE,IAAA,mBAAW,EAAC,IAAI,CAAC;YACzC,cAAc;SACf,CAAC,CAAC;QAEH,8BAA8B;QAC9B,OAAO,mCACF,OAAO,GACP,IAAA,uBAAY,EAAC,CAAC,2CAA2C,EAAE,SAAS,CAAC,CAAC,CAC1E,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,0CAA0C;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAA,0BAAiB,EAAC,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,IAAA,qCAA4B,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAClD,IAAA,qCAA4B,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC;IAE1E,IAAA,mCAA0B,EAAC,IAAI,EAAE,OAAO,CAAC,IAAI,kCACxC,OAAO,KACV,OAAO,kCACF,OAAO,CAAC,OAAO;YAClB,yCAAyC;YACzC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,cAAc,CAAC,EAAE;gBACrD,QAAQ,EAAE,iBAAiB;gBAC3B,OAAO,EAAE;oBACP,QAAQ,EAAE,CAAC,eAAe,iBAAiB,WAAW,CAAC;oBACvD,GAAG,EAAE,eAAe;iBACrB;aACF,EACD,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,aAAa,CAAC,EAAE;gBACpD,QAAQ,EAAE,iBAAiB;gBAC3B,OAAO,EAAE;oBACP,QAAQ,EAAE,CAAC,eAAe,iBAAiB,UAAU,CAAC;oBACtD,GAAG,EAAE,eAAe;iBACrB;aACF,OAEH,CAAC;IAEH,MAAM,IAAA,yCAA+B,EAAC,IAAI,EAAE,CAAC,oCAA4B,CAAC,CAAC,CAAC;IAE5E,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;IACjC,OAAO,GAAG,EAAE;QACV,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC,CAAA,CAAC;AA1JW,QAAA,oBAAoB,wBA0J/B;AAEF,kBAAe,4BAAoB,CAAC"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
export type TsMcpServerComputeType = 'None' | 'BedrockAgentCoreRuntime';
|
|
7
|
+
|
|
6
8
|
/**
|
|
7
9
|
* TypeScript types for options defined in schema.json
|
|
8
10
|
* Update this to match schema.json if you make changes.
|
|
@@ -10,4 +12,5 @@
|
|
|
10
12
|
export interface TsMcpServerGeneratorSchema {
|
|
11
13
|
project: string;
|
|
12
14
|
name?: string;
|
|
15
|
+
computeType?: TsMcpServerComputeType;
|
|
13
16
|
}
|
|
@@ -15,6 +15,14 @@
|
|
|
15
15
|
"x-prompt": "Select the TypeScript project to add the MCP server to",
|
|
16
16
|
"x-dropdown": "projects"
|
|
17
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
|
+
},
|
|
18
26
|
"name": {
|
|
19
27
|
"type": "string",
|
|
20
28
|
"description": "The name of your MCP server (default: mcp-server)",
|
|
@@ -1,26 +1,99 @@
|
|
|
1
1
|
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
2
|
|
|
3
|
-
exports[`ts#nx-plugin generator > should generate MCP server files > test-plugin/src/mcp-server/
|
|
3
|
+
exports[`ts#nx-plugin generator > should generate MCP server files > test-plugin/src/mcp-server/http.ts 1`] = `
|
|
4
4
|
"#!/usr/bin/env node
|
|
5
|
-
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
6
5
|
import { createServer } from './server';
|
|
6
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
7
|
+
import express, { Request, Response } from 'express';
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
const transport = new StdioServerTransport();
|
|
10
|
-
await createServer().connect(transport);
|
|
11
|
-
console.error('MCP Server listening on STDIO');
|
|
12
|
-
};
|
|
9
|
+
const PORT = 8000;
|
|
13
10
|
|
|
14
|
-
|
|
11
|
+
const app = express();
|
|
12
|
+
app.use(express.json());
|
|
13
|
+
|
|
14
|
+
app.post('/mcp', async (req: Request, res: Response) => {
|
|
15
15
|
try {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
const server = createServer();
|
|
17
|
+
const transport: StreamableHTTPServerTransport =
|
|
18
|
+
new StreamableHTTPServerTransport({
|
|
19
|
+
sessionIdGenerator: undefined,
|
|
20
|
+
});
|
|
21
|
+
res.on('close', () => {
|
|
22
|
+
console.log('Request closed');
|
|
23
|
+
transport.close();
|
|
24
|
+
server.close();
|
|
25
|
+
});
|
|
26
|
+
await server.connect(transport);
|
|
27
|
+
await transport.handleRequest(req, res, {
|
|
28
|
+
...req.body,
|
|
29
|
+
// AgentCore pings with null parameters where the MCP SDK expects an empty object
|
|
30
|
+
params: req.body.method === 'ping' ? {} : req.body.params,
|
|
31
|
+
});
|
|
32
|
+
} catch (error) {
|
|
33
|
+
console.error('Error handling MCP request:', error);
|
|
34
|
+
if (!res.headersSent) {
|
|
35
|
+
res.status(500).json({
|
|
36
|
+
jsonrpc: '2.0',
|
|
37
|
+
error: {
|
|
38
|
+
code: -32603,
|
|
39
|
+
message: 'Internal server error',
|
|
40
|
+
},
|
|
41
|
+
id: null,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
19
44
|
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// SSE notifications not supported in stateless mode
|
|
48
|
+
app.get('/mcp', async (req: Request, res: Response) => {
|
|
49
|
+
console.log('Received GET MCP request');
|
|
50
|
+
res.writeHead(405).end(
|
|
51
|
+
JSON.stringify({
|
|
52
|
+
jsonrpc: '2.0',
|
|
53
|
+
error: {
|
|
54
|
+
code: -32000,
|
|
55
|
+
message: 'Method not allowed.',
|
|
56
|
+
},
|
|
57
|
+
id: null,
|
|
58
|
+
}),
|
|
59
|
+
);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// Session termination not needed in stateless mode
|
|
63
|
+
app.delete('/mcp', async (req: Request, res: Response) => {
|
|
64
|
+
console.log('Received DELETE MCP request');
|
|
65
|
+
res.writeHead(405).end(
|
|
66
|
+
JSON.stringify({
|
|
67
|
+
jsonrpc: '2.0',
|
|
68
|
+
error: {
|
|
69
|
+
code: -32000,
|
|
70
|
+
message: 'Method not allowed.',
|
|
71
|
+
},
|
|
72
|
+
id: null,
|
|
73
|
+
}),
|
|
74
|
+
);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Start the server
|
|
78
|
+
void (async () => {
|
|
79
|
+
app.listen(PORT, (error) => {
|
|
80
|
+
if (error) {
|
|
81
|
+
console.error('Failed to start server:', error);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
console.log(
|
|
85
|
+
\`MCP Stateless Streamable HTTP Server listening on port \${PORT}\`,
|
|
86
|
+
);
|
|
87
|
+
});
|
|
20
88
|
})();
|
|
21
89
|
"
|
|
22
90
|
`;
|
|
23
91
|
|
|
92
|
+
exports[`ts#nx-plugin generator > should generate MCP server files > test-plugin/src/mcp-server/index.ts 1`] = `
|
|
93
|
+
"export * from './server';
|
|
94
|
+
"
|
|
95
|
+
`;
|
|
96
|
+
|
|
24
97
|
exports[`ts#nx-plugin generator > should generate MCP server files > test-plugin/src/mcp-server/resources/GENERAL_GUIDANCE.md 1`] = `
|
|
25
98
|
"# General Guidance
|
|
26
99
|
|
|
@@ -127,6 +200,27 @@ This server provides resources and tools for quickly scaffolding projects using
|
|
|
127
200
|
"
|
|
128
201
|
`;
|
|
129
202
|
|
|
203
|
+
exports[`ts#nx-plugin generator > should generate MCP server files > test-plugin/src/mcp-server/stdio.ts 1`] = `
|
|
204
|
+
"#!/usr/bin/env node
|
|
205
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
206
|
+
import { createServer } from './server';
|
|
207
|
+
|
|
208
|
+
export const startMcpServer = async () => {
|
|
209
|
+
const transport = new StdioServerTransport();
|
|
210
|
+
await createServer().connect(transport);
|
|
211
|
+
console.error('MCP Server listening on STDIO');
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
void (async () => {
|
|
215
|
+
try {
|
|
216
|
+
await startMcpServer();
|
|
217
|
+
} catch (e) {
|
|
218
|
+
console.error(e);
|
|
219
|
+
}
|
|
220
|
+
})();
|
|
221
|
+
"
|
|
222
|
+
`;
|
|
223
|
+
|
|
130
224
|
exports[`ts#nx-plugin generator > should generate MCP server files > test-plugin/src/mcp-server/tools/create-workspace-command.ts 1`] = `
|
|
131
225
|
"import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
132
226
|
import { z } from 'zod-v3';
|
|
@@ -25,6 +25,9 @@ function tsReactWebsiteAuthGenerator(tree, options) {
|
|
|
25
25
|
if (tree.exists((0, devkit_1.joinPathFragments)(srcRoot, 'components/CognitoAuth/index.tsx'))) {
|
|
26
26
|
throw new Error(`This generator has already been run on ${options.project}.`);
|
|
27
27
|
}
|
|
28
|
+
if (!options.cognitoDomain) {
|
|
29
|
+
throw new Error('A Cognito domain must be specified!');
|
|
30
|
+
}
|
|
28
31
|
yield (0, generator_1.runtimeConfigGenerator)(tree, {
|
|
29
32
|
project: options.project,
|
|
30
33
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/react-website/cognito-auth/generator.ts"],"names":[],"mappings":";;;AAsDA,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/react-website/cognito-auth/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { Tree } from '@nx/devkit';
|
|
6
|
+
export interface AddMcpServerConstructProps {
|
|
7
|
+
mcpServerNameClassName: string;
|
|
8
|
+
mcpServerNameKebabCase: string;
|
|
9
|
+
dockerImageTag: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Add an MCP server CDK construct
|
|
13
|
+
*/
|
|
14
|
+
export declare const addMcpServerConstruct: (tree: Tree, options: AddMcpServerConstructProps) => void;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addMcpServerConstruct = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
*/
|
|
8
|
+
const devkit_1 = require("@nx/devkit");
|
|
9
|
+
const shared_constructs_constants_1 = require("../shared-constructs-constants");
|
|
10
|
+
const ast_1 = require("../ast");
|
|
11
|
+
/**
|
|
12
|
+
* Add an MCP server CDK construct
|
|
13
|
+
*/
|
|
14
|
+
const addMcpServerConstruct = (tree, options) => {
|
|
15
|
+
// Add the AgentCore runtime construct
|
|
16
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'core', 'agent-core'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'core', 'agent-core'), {}, {
|
|
17
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting,
|
|
18
|
+
});
|
|
19
|
+
// Generate app specific CDK construct
|
|
20
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'app', 'mcp-servers'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'app', 'mcp-servers'), options, {
|
|
21
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting,
|
|
22
|
+
});
|
|
23
|
+
// Export app specific CDK construct
|
|
24
|
+
(0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'app', 'mcp-servers', 'index.ts'), `./${options.mcpServerNameKebabCase}/${options.mcpServerNameKebabCase}.js`);
|
|
25
|
+
(0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'app', 'index.ts'), './mcp-servers/index.js');
|
|
26
|
+
};
|
|
27
|
+
exports.addMcpServerConstruct = addMcpServerConstruct;
|
|
28
|
+
//# sourceMappingURL=agent-core-constructs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-core-constructs.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/agent-core-constructs/agent-core-constructs.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAKoB;AACpB,gFAGwC;AACxC,gCAAuC;AAQvC;;GAEG;AACI,MAAM,qBAAqB,GAAG,CACnC,IAAU,EACV,OAAmC,EACnC,EAAE;IACF,sCAAsC;IACtC,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAC3D,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,MAAM,EACN,YAAY,CACb,EACD,EAAE,EACF;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,sCAAsC;IACtC,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,EAC3D,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,aAAa,CACd,EACD,OAAO,EACP;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,oCAAoC;IACpC,IAAA,mBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,aAAa,EACb,UAAU,CACX,EACD,KAAK,OAAO,CAAC,sBAAsB,IAAI,OAAO,CAAC,sBAAsB,KAAK,CAC3E,CAAC;IACF,IAAA,mBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,UAAU,CACX,EACD,wBAAwB,CACzB,CAAC;AACJ,CAAC,CAAC;AA9DW,QAAA,qBAAqB,yBA8DhC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
FROM <%- dockerImageTag %>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import { execSync } from 'child_process';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import * as url from 'url';
|
|
6
|
+
import {
|
|
7
|
+
AgentCoreRuntime,
|
|
8
|
+
AgentCoreRuntimeProps,
|
|
9
|
+
} from '../../../core/agent-core/runtime.js';
|
|
10
|
+
|
|
11
|
+
export type <%- mcpServerNameClassName %>Props = Omit<
|
|
12
|
+
AgentCoreRuntimeProps,
|
|
13
|
+
'runtimeName' | 'serverProtocol' | 'containerUri'
|
|
14
|
+
>;
|
|
15
|
+
|
|
16
|
+
export class <%- mcpServerNameClassName %> extends Construct {
|
|
17
|
+
public readonly dockerImage: DockerImageAsset;
|
|
18
|
+
public readonly agentCoreRuntime: AgentCoreRuntime;
|
|
19
|
+
|
|
20
|
+
constructor(scope: Construct, id: string, props?: <%- mcpServerNameClassName %>Props) {
|
|
21
|
+
super(scope, id);
|
|
22
|
+
|
|
23
|
+
this.dockerImage = new DockerImageAsset(this, 'DockerImage', {
|
|
24
|
+
directory: path.dirname(url.fileURLToPath(new URL(import.meta.url))),
|
|
25
|
+
extraHash: execSync(
|
|
26
|
+
`docker inspect <%- dockerImageTag %> --format '{{.Descriptor.digest}}'`,
|
|
27
|
+
{ encoding: 'utf-8' },
|
|
28
|
+
).trim(),
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
this.agentCoreRuntime = new AgentCoreRuntime(this, 'AgentCore', {
|
|
32
|
+
runtimeName: '<%- mcpServerNameClassName %>',
|
|
33
|
+
serverProtocol: 'MCP',
|
|
34
|
+
containerUri: this.dockerImage.imageUri,
|
|
35
|
+
...props,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|