@aws/nx-plugin 0.83.0 → 0.84.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/LICENSE-THIRD-PARTY +580 -724
- package/generators.json +16 -8
- package/package.json +1 -1
- package/src/connection/generator.d.ts +12 -0
- package/src/connection/generator.js +27 -8
- package/src/connection/generator.js.map +1 -1
- package/src/infra/app/schema.d.ts +1 -0
- package/src/infra/app/schema.json +5 -0
- package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +3 -0
- package/src/py/fast-api/generator.js +2 -0
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/schema.d.ts +1 -0
- package/src/py/fast-api/schema.json +5 -0
- package/src/py/mcp-server/generator.js +14 -0
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/project/generator.d.ts +1 -0
- package/src/py/project/generator.js +10 -2
- package/src/py/project/generator.js.map +1 -1
- package/src/py/project/schema.d.ts +1 -0
- package/src/py/project/schema.json +5 -0
- package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +5 -5
- package/src/py/strands-agent/files/app/agent.py.template +5 -5
- package/src/py/strands-agent/generator.js +13 -0
- package/src/py/strands-agent/generator.js.map +1 -1
- package/src/smithy/ts/api/schema.d.ts +1 -0
- package/src/smithy/ts/api/schema.json +5 -0
- package/src/terraform/project/schema.d.ts +1 -0
- package/src/terraform/project/schema.json +5 -0
- package/src/trpc/backend/generator.js +1 -0
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/backend/schema.d.ts +1 -0
- package/src/trpc/backend/schema.json +5 -0
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
- package/src/ts/mcp-server/files/Dockerfile.template +1 -1
- package/src/ts/mcp-server/files/server.ts.template +2 -2
- package/src/ts/mcp-server/files/tools/divide.ts.template +13 -0
- package/src/ts/mcp-server/generator.js +15 -1
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/nx-plugin/__snapshots__/generator.spec.ts.snap +24 -0
- package/src/ts/react-website/app/generator.js +5 -4
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/ts/react-website/app/schema.d.ts +1 -0
- package/src/ts/react-website/app/schema.json +5 -0
- package/src/ts/strands-agent/__snapshots__/generator.spec.ts.snap +48 -153
- package/src/ts/strands-agent/files/app/agent-core-trpc-client.ts.template +19 -2
- package/src/ts/strands-agent/files/app/agent.ts.template +11 -9
- package/src/ts/strands-agent/files/app/index.ts.template +10 -1
- package/src/ts/strands-agent/files/app/init.ts.template +3 -2
- package/src/ts/strands-agent/files/app/router.ts.template +1 -1
- package/src/ts/strands-agent/files/deploy/Dockerfile.template +1 -1
- package/src/ts/strands-agent/generator.js +13 -1
- package/src/ts/strands-agent/generator.js.map +1 -1
- package/src/ts/strands-agent/mcp-connection/__snapshots__/generator.spec.ts.snap +231 -0
- package/src/ts/strands-agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +37 -0
- package/src/ts/strands-agent/mcp-connection/generator.d.ts +10 -0
- package/src/ts/strands-agent/mcp-connection/generator.js +124 -0
- package/src/ts/strands-agent/mcp-connection/generator.js.map +1 -0
- package/src/ts/strands-agent/mcp-connection/schema.d.ts +15 -0
- package/src/ts/strands-agent/mcp-connection/schema.json +26 -0
- package/src/utils/agent-connection/agent-connection.d.ts +11 -0
- package/src/utils/agent-connection/agent-connection.js +35 -0
- package/src/utils/agent-connection/agent-connection.js.map +1 -0
- package/src/{ts/strands-agent/files/app/agent-core-mcp-client.ts.template → utils/agent-connection/files/core/agentcore-mcp-client.ts.template} +62 -35
- package/src/utils/ast.js +16 -7
- package/src/utils/ast.js.map +1 -1
- package/src/utils/identity-constructs/files/terraform/core/user-identity/identity/identity.tf.template +8 -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/src/ts/mcp-server/files/tools/add.ts.template +0 -13
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
1
2
|
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
|
|
2
3
|
import { createTRPCClient, createWSClient, WebSocketLinkOptions, wsLink } from '@trpc/client';
|
|
3
4
|
import { AwsClient } from 'aws4fetch';
|
|
@@ -9,6 +10,11 @@ export interface WebSocketTrpcClientOptions {
|
|
|
9
10
|
* URL of the websocket server, eg http://localhost:8080/ws
|
|
10
11
|
*/
|
|
11
12
|
url: string;
|
|
13
|
+
/**
|
|
14
|
+
* Session ID to include in the WebSocket handshake headers.
|
|
15
|
+
* Defaults to a random UUID if not provided.
|
|
16
|
+
*/
|
|
17
|
+
sessionId?: string;
|
|
12
18
|
/**
|
|
13
19
|
* Factory for creating headers to include in the WebSocket handshake
|
|
14
20
|
*/
|
|
@@ -24,12 +30,16 @@ export class WebSocketTrpcClient {
|
|
|
24
30
|
*/
|
|
25
31
|
public static create = <TRouter extends AnyTRPCRouter>({
|
|
26
32
|
url,
|
|
33
|
+
sessionId = randomUUID(),
|
|
27
34
|
buildHeaders = async () => ({}),
|
|
28
35
|
}: WebSocketTrpcClientOptions) => {
|
|
29
36
|
let headers = {};
|
|
30
37
|
const client = createWSClient({
|
|
31
38
|
url: async () => {
|
|
32
|
-
headers =
|
|
39
|
+
headers = {
|
|
40
|
+
...(await buildHeaders()),
|
|
41
|
+
'X-Amzn-Bedrock-AgentCore-Runtime-Session-Id': sessionId,
|
|
42
|
+
};
|
|
33
43
|
return url;
|
|
34
44
|
},
|
|
35
45
|
WebSocket: class extends WebSocket {
|
|
@@ -50,6 +60,11 @@ export interface AgentCoreTrpcClientOptions {
|
|
|
50
60
|
* The ARN of the Bedrock AgentCore Runtime to connect to
|
|
51
61
|
*/
|
|
52
62
|
agentRuntimeArn: string;
|
|
63
|
+
/**
|
|
64
|
+
* Session ID to include in the WebSocket handshake headers.
|
|
65
|
+
* Defaults to a random UUID if not provided.
|
|
66
|
+
*/
|
|
67
|
+
sessionId?: string;
|
|
53
68
|
}
|
|
54
69
|
|
|
55
70
|
export interface AgentCoreTrpcClientIamOptions extends AgentCoreTrpcClientOptions {
|
|
@@ -76,7 +91,7 @@ export class AgentCoreTrpcClient {
|
|
|
76
91
|
*/
|
|
77
92
|
private static buildUrl = (agentRuntimeArn: string) => {
|
|
78
93
|
const region = agentRuntimeArn.split(':')[3];
|
|
79
|
-
const url = `wss://bedrock-agentcore.${region}.amazonaws.com/runtimes/${agentRuntimeArn
|
|
94
|
+
const url = `wss://bedrock-agentcore.${region}.amazonaws.com/runtimes/${encodeURIComponent(agentRuntimeArn)}/ws`;
|
|
80
95
|
return { region, url };
|
|
81
96
|
};
|
|
82
97
|
|
|
@@ -93,6 +108,7 @@ export class AgentCoreTrpcClient {
|
|
|
93
108
|
|
|
94
109
|
return WebSocketTrpcClient.create<TRouter>({
|
|
95
110
|
url,
|
|
111
|
+
sessionId: options.sessionId,
|
|
96
112
|
buildHeaders: async () =>
|
|
97
113
|
Object.fromEntries(
|
|
98
114
|
(
|
|
@@ -116,6 +132,7 @@ export class AgentCoreTrpcClient {
|
|
|
116
132
|
|
|
117
133
|
return WebSocketTrpcClient.create<TRouter>({
|
|
118
134
|
url,
|
|
135
|
+
sessionId: options.sessionId,
|
|
119
136
|
buildHeaders: async () => ({
|
|
120
137
|
Authorization: `Bearer ${await options.accessTokenProvider()}`,
|
|
121
138
|
}),
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { Agent, tool } from '@strands-agents/sdk';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
|
-
const
|
|
5
|
-
name: '
|
|
6
|
-
description: '
|
|
4
|
+
const multiply = tool({
|
|
5
|
+
name: 'Multiply',
|
|
6
|
+
description: 'Multiply two numbers',
|
|
7
7
|
inputSchema: z.object({
|
|
8
8
|
a: z.number(),
|
|
9
9
|
b: z.number(),
|
|
10
10
|
}),
|
|
11
|
-
callback: ({ a, b }) => a
|
|
11
|
+
callback: ({ a, b }) => a * b,
|
|
12
12
|
});
|
|
13
13
|
|
|
14
|
-
export const getAgent = () =>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
export const getAgent = async (sessionId: string) => {
|
|
15
|
+
console.log(`Creating agent for session ${sessionId}`);
|
|
16
|
+
return new Agent({
|
|
17
|
+
systemPrompt: `You are a mathematical wizard.
|
|
18
|
+
Use your tools for mathematical tasks.
|
|
18
19
|
Refer to tools as your 'spellbook'.`,
|
|
19
|
-
tools: [
|
|
20
|
+
tools: [multiply],
|
|
20
21
|
});
|
|
22
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
1
2
|
import { createServer } from 'http';
|
|
2
3
|
import {
|
|
3
4
|
CreateHTTPContextOptions,
|
|
@@ -16,7 +17,15 @@ const PORT = parseInt(process.env.PORT || '8080');
|
|
|
16
17
|
|
|
17
18
|
const createContext = (
|
|
18
19
|
opts: CreateHTTPContextOptions | CreateWSSContextFnOptions,
|
|
19
|
-
): Context =>
|
|
20
|
+
): Context => {
|
|
21
|
+
const sessionId =
|
|
22
|
+
('req' in opts
|
|
23
|
+
? opts.req.headers['x-amzn-bedrock-agentcore-runtime-session-id']
|
|
24
|
+
: undefined) ?? randomUUID();
|
|
25
|
+
return {
|
|
26
|
+
sessionId: Array.isArray(sessionId) ? sessionId[0] : sessionId,
|
|
27
|
+
};
|
|
28
|
+
};
|
|
20
29
|
|
|
21
30
|
const handler = createHTTPHandler({
|
|
22
31
|
router: appRouter,
|
|
@@ -4,7 +4,7 @@ WORKDIR /app
|
|
|
4
4
|
|
|
5
5
|
# Add AWS Distro for OpenTelemetry for observability
|
|
6
6
|
# https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/observability-configure.html
|
|
7
|
-
RUN npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation
|
|
7
|
+
RUN npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation@<%- adotVersion %>
|
|
8
8
|
|
|
9
9
|
# Copy bundled agent
|
|
10
10
|
COPY --from=workspace <%- distDir %>/bundle/agent/<%- name %>/index.js /app
|
|
@@ -51,6 +51,7 @@ const tsStrandsAgentGenerator = (tree, options) => tslib_1.__awaiter(void 0, voi
|
|
|
51
51
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'deploy'), targetSourceDir, {
|
|
52
52
|
distDir,
|
|
53
53
|
name,
|
|
54
|
+
adotVersion: versions_1.TS_VERSIONS['@aws/aws-distro-opentelemetry-node-autoinstrumentation'],
|
|
54
55
|
}, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
55
56
|
const dockerTargetName = `${agentTargetPrefix}-docker`;
|
|
56
57
|
project.targets[dockerTargetName] = {
|
|
@@ -102,8 +103,19 @@ const tsStrandsAgentGenerator = (tree, options) => tslib_1.__awaiter(void 0, voi
|
|
|
102
103
|
},
|
|
103
104
|
},
|
|
104
105
|
continuous: true,
|
|
106
|
+
}, [`${agentTargetPrefix}-serve-local`]: {
|
|
107
|
+
executor: 'nx:run-commands',
|
|
108
|
+
options: {
|
|
109
|
+
commands: [`tsx --watch ${relativeSourceDir}/index.ts`],
|
|
110
|
+
cwd: '{projectRoot}',
|
|
111
|
+
env: {
|
|
112
|
+
PORT: `${localDevPort}`,
|
|
113
|
+
SERVE_LOCAL: 'true',
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
continuous: true,
|
|
105
117
|
} }) }));
|
|
106
|
-
(0, nx_1.addComponentGeneratorMetadata)(tree, project.name, exports.TS_STRANDS_AGENT_GENERATOR_INFO, targetSourceDirRelativeToProjectRoot, agentTargetPrefix, { port: localDevPort });
|
|
118
|
+
(0, nx_1.addComponentGeneratorMetadata)(tree, project.name, exports.TS_STRANDS_AGENT_GENERATOR_INFO, targetSourceDirRelativeToProjectRoot, agentTargetPrefix, { port: localDevPort, rc: agentNameClassName });
|
|
107
119
|
yield (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [
|
|
108
120
|
exports.TS_STRANDS_AGENT_GENERATOR_INFO,
|
|
109
121
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/strands-agent/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCASoB;AAEpB,uCAMwB;AACxB,iDAAsE;AACtE,+CAA0D;AAC1D,6CAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/strands-agent/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`ts#strands-agent#mcp-connection generator > should match snapshot for agent-connection src files > agent-connection-index.ts 1`] = `
|
|
4
|
+
"export * from './app/inventory-mcp-client.js';
|
|
5
|
+
// Export your library code here
|
|
6
|
+
"
|
|
7
|
+
`;
|
|
8
|
+
|
|
9
|
+
exports[`ts#strands-agent#mcp-connection generator > should match snapshot for agent-connection src files > agentcore-mcp-client.ts 1`] = `
|
|
10
|
+
"import { randomUUID } from 'node:crypto';
|
|
11
|
+
import { McpClient } from '@strands-agents/sdk';
|
|
12
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
13
|
+
import { AwsClient } from 'aws4fetch';
|
|
14
|
+
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Common options for creating an AgentCore MCP client
|
|
18
|
+
*/
|
|
19
|
+
export interface AgentCoreMcpClientOptions {
|
|
20
|
+
/**
|
|
21
|
+
* The ARN of the Bedrock AgentCore Runtime to connect to
|
|
22
|
+
*/
|
|
23
|
+
agentRuntimeArn: string;
|
|
24
|
+
/**
|
|
25
|
+
* Session ID to include in request headers.
|
|
26
|
+
* Defaults to a random UUID if not provided.
|
|
27
|
+
*/
|
|
28
|
+
sessionId?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Options for creating an AgentCore MCP client with IAM authentication
|
|
33
|
+
*/
|
|
34
|
+
export interface AgentCoreMcpClientIamOptions extends AgentCoreMcpClientOptions {
|
|
35
|
+
/**
|
|
36
|
+
* Optional AWS credential provider. If not provided, uses the default
|
|
37
|
+
* credential provider chain from the AWS SDK.
|
|
38
|
+
*/
|
|
39
|
+
credentialProvider?: ReturnType<typeof fromNodeProviderChain>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Options for creating an AgentCore MCP client with JWT authentication
|
|
44
|
+
*/
|
|
45
|
+
export interface AgentCoreMcpClientJwtOptions extends AgentCoreMcpClientOptions {
|
|
46
|
+
/**
|
|
47
|
+
* A function which returns the JWT access token used to authenticate
|
|
48
|
+
*/
|
|
49
|
+
accessTokenProvider: () => Promise<string>;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Internal options for creating an AgentCore MCP client
|
|
54
|
+
*/
|
|
55
|
+
interface CreateOptions {
|
|
56
|
+
url: string;
|
|
57
|
+
sessionId?: string;
|
|
58
|
+
buildHeaders?: () => Promise<Record<string, string>>;
|
|
59
|
+
fetch?: typeof fetch;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Factory for clients to call MCP servers hosted on Bedrock AgentCore Runtime
|
|
64
|
+
*/
|
|
65
|
+
export class AgentCoreMcpClient {
|
|
66
|
+
/**
|
|
67
|
+
* Construct the invocation URL for an AgentCore runtime ARN and extract the region.
|
|
68
|
+
* ARN format: arn:partition:service:region:account-id:resource
|
|
69
|
+
*/
|
|
70
|
+
private static buildUrl(agentRuntimeArn: string): {
|
|
71
|
+
region: string;
|
|
72
|
+
url: string;
|
|
73
|
+
} {
|
|
74
|
+
const region = agentRuntimeArn.split(':')[3];
|
|
75
|
+
const url = \`https://bedrock-agentcore.\${region}.amazonaws.com/runtimes/\${encodeURIComponent(agentRuntimeArn)}/invocations?qualifier=DEFAULT\`;
|
|
76
|
+
return { region, url };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Internal method to create an MCP client
|
|
81
|
+
*/
|
|
82
|
+
private static create(options: CreateOptions): McpClient {
|
|
83
|
+
const {
|
|
84
|
+
url,
|
|
85
|
+
sessionId = randomUUID(),
|
|
86
|
+
buildHeaders = async () => ({}),
|
|
87
|
+
fetch: customFetch,
|
|
88
|
+
} = options;
|
|
89
|
+
|
|
90
|
+
// Create a custom fetch that adds required headers
|
|
91
|
+
const fetchWithHeaders: typeof fetch = async (input, init) => {
|
|
92
|
+
const headers = {
|
|
93
|
+
'X-Amzn-Bedrock-AgentCore-Runtime-Session-Id': sessionId,
|
|
94
|
+
...(await buildHeaders()),
|
|
95
|
+
};
|
|
96
|
+
const existingHeaders = init?.headers;
|
|
97
|
+
|
|
98
|
+
const mergedInit = {
|
|
99
|
+
...init,
|
|
100
|
+
headers: !existingHeaders
|
|
101
|
+
? headers
|
|
102
|
+
: existingHeaders instanceof Headers
|
|
103
|
+
? (() => {
|
|
104
|
+
const h = new Headers(existingHeaders);
|
|
105
|
+
Object.entries(headers).forEach(([k, v]) => h.append(k, v));
|
|
106
|
+
return h;
|
|
107
|
+
})()
|
|
108
|
+
: Array.isArray(existingHeaders)
|
|
109
|
+
? [...existingHeaders, ...Object.entries(headers)]
|
|
110
|
+
: { ...existingHeaders, ...headers },
|
|
111
|
+
};
|
|
112
|
+
return (customFetch || fetch)(input, mergedInit);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
// Create the transport
|
|
116
|
+
const transport = new StreamableHTTPClientTransport(new URL(url), {
|
|
117
|
+
fetch: fetchWithHeaders,
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
// Create and return the MCP client
|
|
121
|
+
return new McpClient({ transport });
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Create an MCP client with IAM (SigV4) authentication
|
|
126
|
+
*/
|
|
127
|
+
static withIamAuth(options: AgentCoreMcpClientIamOptions): McpClient {
|
|
128
|
+
const { agentRuntimeArn, sessionId } = options;
|
|
129
|
+
const credentialProvider =
|
|
130
|
+
options.credentialProvider ?? fromNodeProviderChain();
|
|
131
|
+
const { region, url } = AgentCoreMcpClient.buildUrl(agentRuntimeArn);
|
|
132
|
+
|
|
133
|
+
// Create a SigV4 signing fetch function
|
|
134
|
+
const sigv4Fetch: typeof fetch = async (...args) => {
|
|
135
|
+
const credentials = await credentialProvider();
|
|
136
|
+
const client = new AwsClient({
|
|
137
|
+
...credentials,
|
|
138
|
+
service: 'bedrock-agentcore',
|
|
139
|
+
region,
|
|
140
|
+
});
|
|
141
|
+
return client.fetch(...args);
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
return AgentCoreMcpClient.create({
|
|
145
|
+
url,
|
|
146
|
+
sessionId,
|
|
147
|
+
fetch: sigv4Fetch,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Create an MCP client with JWT authentication
|
|
153
|
+
*/
|
|
154
|
+
static withJwtAuth(options: AgentCoreMcpClientJwtOptions): McpClient {
|
|
155
|
+
const { agentRuntimeArn, accessTokenProvider, sessionId } = options;
|
|
156
|
+
const { url } = AgentCoreMcpClient.buildUrl(agentRuntimeArn);
|
|
157
|
+
|
|
158
|
+
return AgentCoreMcpClient.create({
|
|
159
|
+
url,
|
|
160
|
+
sessionId,
|
|
161
|
+
buildHeaders: async () => ({
|
|
162
|
+
Authorization: \`Bearer \${await accessTokenProvider()}\`,
|
|
163
|
+
}),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
"
|
|
168
|
+
`;
|
|
169
|
+
|
|
170
|
+
exports[`ts#strands-agent#mcp-connection generator > should match snapshot for agent-connection src files > inventory-mcp-client.ts 1`] = `
|
|
171
|
+
"import { McpClient } from '@strands-agents/sdk';
|
|
172
|
+
import { AgentCoreMcpClient } from '../core/agentcore-mcp-client.js';
|
|
173
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
174
|
+
import { getAppConfig } from '@aws-lambda-powertools/parameters/appconfig';
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Client for connecting to the InventoryMcp MCP server.
|
|
178
|
+
*
|
|
179
|
+
* In deployed mode: resolves the AgentCore runtime ARN from runtime config
|
|
180
|
+
* and uses SigV4-authenticated AgentCore transport.
|
|
181
|
+
*
|
|
182
|
+
* In local mode (SERVE_LOCAL env var set): connects directly
|
|
183
|
+
* to the local MCP server via Streamable HTTP.
|
|
184
|
+
*/
|
|
185
|
+
export class InventoryMcpClient {
|
|
186
|
+
static async create(sessionId: string): Promise<McpClient> {
|
|
187
|
+
if (process.env.SERVE_LOCAL === 'true') {
|
|
188
|
+
// Local development: connect directly via Streamable HTTP
|
|
189
|
+
const transport = new StreamableHTTPClientTransport(
|
|
190
|
+
new URL('http://localhost:8082/mcp'),
|
|
191
|
+
);
|
|
192
|
+
return new McpClient({ transport });
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Deployed: resolve ARN from runtime config, use AgentCore transport
|
|
196
|
+
const config = (await getAppConfig('connection', {
|
|
197
|
+
application: process.env.RUNTIME_CONFIG_APP_ID!,
|
|
198
|
+
environment: 'default',
|
|
199
|
+
transform: 'json',
|
|
200
|
+
})) as Record<string, any>;
|
|
201
|
+
|
|
202
|
+
return AgentCoreMcpClient.withIamAuth({
|
|
203
|
+
agentRuntimeArn: config.agentRuntimes.InventoryMcp,
|
|
204
|
+
sessionId,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
"
|
|
209
|
+
`;
|
|
210
|
+
|
|
211
|
+
exports[`ts#strands-agent#mcp-connection generator > should match snapshot for agent-connection src files > transformed-agent.ts 1`] = `
|
|
212
|
+
"import { InventoryMcpClient } from ':proj/agent-connection';
|
|
213
|
+
import { Agent, tool } from '@strands-agents/sdk';
|
|
214
|
+
import { z } from 'zod';
|
|
215
|
+
|
|
216
|
+
const multiply = tool({
|
|
217
|
+
name: 'Multiply',
|
|
218
|
+
description: 'Multiply two numbers',
|
|
219
|
+
inputSchema: z.object({ a: z.number(), b: z.number() }),
|
|
220
|
+
callback: ({ a, b }) => a * b,
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
export const getAgent = async (sessionId: string) => {
|
|
224
|
+
const inventoryMcp = await InventoryMcpClient.create(sessionId);
|
|
225
|
+
return new Agent({
|
|
226
|
+
systemPrompt: 'You are a mathematical wizard.',
|
|
227
|
+
tools: [inventoryMcp, multiply],
|
|
228
|
+
});
|
|
229
|
+
};
|
|
230
|
+
"
|
|
231
|
+
`;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { McpClient } from '@strands-agents/sdk';
|
|
2
|
+
import { AgentCoreMcpClient } from '../core/agentcore-mcp-client.js';
|
|
3
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
4
|
+
import { getAppConfig } from '@aws-lambda-powertools/parameters/appconfig';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Client for connecting to the <%- mcpServerClassName %> MCP server.
|
|
8
|
+
*
|
|
9
|
+
* In deployed mode: resolves the AgentCore runtime ARN from runtime config
|
|
10
|
+
* and uses SigV4-authenticated AgentCore transport.
|
|
11
|
+
*
|
|
12
|
+
* In local mode (SERVE_LOCAL env var set): connects directly
|
|
13
|
+
* to the local MCP server via Streamable HTTP.
|
|
14
|
+
*/
|
|
15
|
+
export class <%- mcpServerClassName %>Client {
|
|
16
|
+
static async create(sessionId: string): Promise<McpClient> {
|
|
17
|
+
if (process.env.SERVE_LOCAL === 'true') {
|
|
18
|
+
// Local development: connect directly via Streamable HTTP
|
|
19
|
+
const transport = new StreamableHTTPClientTransport(
|
|
20
|
+
new URL('http://localhost:<%- mcpServerPort %>/mcp'),
|
|
21
|
+
);
|
|
22
|
+
return new McpClient({ transport });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Deployed: resolve ARN from runtime config, use AgentCore transport
|
|
26
|
+
const config = (await getAppConfig('connection', {
|
|
27
|
+
application: process.env.RUNTIME_CONFIG_APP_ID!,
|
|
28
|
+
environment: 'default',
|
|
29
|
+
transform: 'json',
|
|
30
|
+
})) as Record<string, any>;
|
|
31
|
+
|
|
32
|
+
return AgentCoreMcpClient.withIamAuth({
|
|
33
|
+
agentRuntimeArn: config.agentRuntimes.<%- mcpServerClassName %>,
|
|
34
|
+
sessionId,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -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 { TsStrandsAgentMcpConnectionGeneratorSchema } from './schema';
|
|
7
|
+
import { NxGeneratorInfo } from '../../../utils/nx';
|
|
8
|
+
export declare const TS_STRANDS_AGENT_MCP_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
|
+
export declare const tsStrandsAgentMcpConnectionGenerator: (tree: Tree, options: TsStrandsAgentMcpConnectionGeneratorSchema) => Promise<GeneratorCallback>;
|
|
10
|
+
export default tsStrandsAgentMcpConnectionGenerator;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tsStrandsAgentMcpConnectionGenerator = exports.TS_STRANDS_AGENT_MCP_CONNECTION_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 versions_1 = require("../../../utils/versions");
|
|
15
|
+
const npm_scope_1 = require("../../../utils/npm-scope");
|
|
16
|
+
const ast_1 = require("../../../utils/ast");
|
|
17
|
+
const agent_connection_1 = require("../../../utils/agent-connection/agent-connection");
|
|
18
|
+
const typescript_1 = tslib_1.__importStar(require("typescript"));
|
|
19
|
+
exports.TS_STRANDS_AGENT_MCP_CONNECTION_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
|
|
20
|
+
const tsStrandsAgentMcpConnectionGenerator = (tree, options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
var _a, _b, _c, _d, _e, _f;
|
|
22
|
+
const sourceProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.sourceProject);
|
|
23
|
+
const targetProject = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.targetProject);
|
|
24
|
+
const agentComponent = options.sourceComponent;
|
|
25
|
+
const mcpComponent = options.targetComponent;
|
|
26
|
+
if (!agentComponent || !mcpComponent) {
|
|
27
|
+
throw new Error('Both sourceComponent and targetComponent must be provided for ts#strands-agent -> mcp connections');
|
|
28
|
+
}
|
|
29
|
+
const mcpComponentName = (_a = mcpComponent.name) !== null && _a !== void 0 ? _a : 'mcp-server';
|
|
30
|
+
const mcpServerClassName = mcpComponent.rc;
|
|
31
|
+
const mcpServerKebabCase = (0, names_1.kebabCase)(mcpServerClassName);
|
|
32
|
+
const mcpServerPort = (_b = mcpComponent.port) !== null && _b !== void 0 ? _b : 8000;
|
|
33
|
+
const npmScope = (0, npm_scope_1.getNpmScope)(tree);
|
|
34
|
+
// 1. Ensure the shared agent-connection project exists
|
|
35
|
+
yield (0, agent_connection_1.ensureTypeScriptAgentConnectionProject)(tree);
|
|
36
|
+
// 2. Generate the per-connection <Name>Client into app/
|
|
37
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'agent-connection', 'app'), (0, devkit_1.joinPathFragments)(agent_connection_1.AGENT_CONNECTION_PROJECT_DIR, 'src', 'app'), {
|
|
38
|
+
mcpServerKebabCase,
|
|
39
|
+
mcpServerClassName,
|
|
40
|
+
mcpServerPort,
|
|
41
|
+
}, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
42
|
+
// Add re-export to index.ts
|
|
43
|
+
(0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(agent_connection_1.AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'), `./app/${mcpServerKebabCase}-client.js`);
|
|
44
|
+
// 3. AST transform agent.ts to add MCP tools
|
|
45
|
+
const agentSourceDir = (0, devkit_1.joinPathFragments)(sourceProject.root, (_c = agentComponent.path) !== null && _c !== void 0 ? _c : 'src');
|
|
46
|
+
const agentFilePath = (0, devkit_1.joinPathFragments)(agentSourceDir, 'agent.ts');
|
|
47
|
+
if (tree.exists(agentFilePath)) {
|
|
48
|
+
const clientClassName = `${mcpServerClassName}Client`;
|
|
49
|
+
const clientVarName = mcpServerClassName.charAt(0).toLowerCase() + mcpServerClassName.slice(1);
|
|
50
|
+
// Add import for the client
|
|
51
|
+
(0, ast_1.addDestructuredImport)(tree, agentFilePath, [clientClassName], `:${npmScope}/agent-connection`);
|
|
52
|
+
// Create: const <clientVarName> = await <ClientClassName>.create(sessionId);
|
|
53
|
+
const clientCreationStatement = typescript_1.factory.createVariableStatement(undefined, typescript_1.factory.createVariableDeclarationList([
|
|
54
|
+
typescript_1.factory.createVariableDeclaration(clientVarName, undefined, undefined, typescript_1.factory.createAwaitExpression(typescript_1.factory.createCallExpression(typescript_1.factory.createPropertyAccessExpression(typescript_1.factory.createIdentifier(clientClassName), 'create'), undefined, [typescript_1.factory.createIdentifier('sessionId')]))),
|
|
55
|
+
], 2));
|
|
56
|
+
// Transform the arrow function that contains `new Agent` to have a block body
|
|
57
|
+
// with the client creation statement before the return
|
|
58
|
+
(0, ast_1.replaceIfExists)(tree, agentFilePath, 'ArrowFunction:has(NewExpression[expression.name="Agent"])', (node) => {
|
|
59
|
+
const arrow = node;
|
|
60
|
+
// Check if already transformed
|
|
61
|
+
if (arrow.getText().includes(clientClassName))
|
|
62
|
+
return node;
|
|
63
|
+
// If the body is an expression (not a block), wrap it in a block with return
|
|
64
|
+
if (!typescript_1.default.isBlock(arrow.body)) {
|
|
65
|
+
return typescript_1.factory.updateArrowFunction(arrow, arrow.modifiers, arrow.typeParameters, arrow.parameters, arrow.type, arrow.equalsGreaterThanToken, typescript_1.factory.createBlock([
|
|
66
|
+
clientCreationStatement,
|
|
67
|
+
typescript_1.factory.createReturnStatement(arrow.body),
|
|
68
|
+
], true));
|
|
69
|
+
}
|
|
70
|
+
// Body is already a block — insert before the statement containing `new Agent`
|
|
71
|
+
const b = arrow.body;
|
|
72
|
+
const agentStatementIndex = b.statements.findIndex((s) => s.getText().includes('new Agent('));
|
|
73
|
+
if (agentStatementIndex === -1)
|
|
74
|
+
return node;
|
|
75
|
+
const newStatements = [...b.statements];
|
|
76
|
+
newStatements.splice(agentStatementIndex, 0, clientCreationStatement);
|
|
77
|
+
return typescript_1.factory.updateArrowFunction(arrow, arrow.modifiers, arrow.typeParameters, arrow.parameters, arrow.type, arrow.equalsGreaterThanToken, typescript_1.factory.updateBlock(b, newStatements));
|
|
78
|
+
});
|
|
79
|
+
// Add client to the tools array: tools: [clientVarName, ...existing]
|
|
80
|
+
(0, ast_1.replaceIfExists)(tree, agentFilePath, 'NewExpression[expression.name="Agent"] ObjectLiteralExpression PropertyAssignment[name.name="tools"] ArrayLiteralExpression', (node) => {
|
|
81
|
+
const arr = node;
|
|
82
|
+
// Check if already added
|
|
83
|
+
if (arr.getText().includes(clientVarName))
|
|
84
|
+
return node;
|
|
85
|
+
return typescript_1.factory.updateArrayLiteralExpression(arr, [
|
|
86
|
+
typescript_1.factory.createIdentifier(clientVarName),
|
|
87
|
+
...arr.elements,
|
|
88
|
+
]);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// 4. Set up serve-local target
|
|
92
|
+
const agentName = (_d = agentComponent.name) !== null && _d !== void 0 ? _d : 'agent';
|
|
93
|
+
const serveLocalTargetName = `${agentName}-serve-local`;
|
|
94
|
+
const mcpServeLocalTargetName = `${mcpComponentName}-serve-local`;
|
|
95
|
+
if ((_e = sourceProject.targets) === null || _e === void 0 ? void 0 : _e[serveLocalTargetName]) {
|
|
96
|
+
const target = sourceProject.targets[serveLocalTargetName];
|
|
97
|
+
target.dependsOn = [
|
|
98
|
+
...((_f = target.dependsOn) !== null && _f !== void 0 ? _f : []),
|
|
99
|
+
{
|
|
100
|
+
projects: [targetProject.name],
|
|
101
|
+
target: mcpServeLocalTargetName,
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
(0, devkit_1.updateProjectConfiguration)(tree, sourceProject.name, sourceProject);
|
|
105
|
+
}
|
|
106
|
+
// 5. Add dependencies
|
|
107
|
+
(0, devkit_1.addDependenciesToPackageJson)(tree, (0, versions_1.withVersions)([
|
|
108
|
+
'@modelcontextprotocol/sdk',
|
|
109
|
+
'@aws-lambda-powertools/parameters',
|
|
110
|
+
'@aws-sdk/client-appconfigdata',
|
|
111
|
+
'aws4fetch',
|
|
112
|
+
'@aws-sdk/credential-providers',
|
|
113
|
+
]), {});
|
|
114
|
+
yield (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [
|
|
115
|
+
exports.TS_STRANDS_AGENT_MCP_CONNECTION_GENERATOR_INFO,
|
|
116
|
+
]);
|
|
117
|
+
yield (0, format_1.formatFilesInSubtree)(tree);
|
|
118
|
+
return () => {
|
|
119
|
+
(0, devkit_1.installPackagesTask)(tree);
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
exports.tsStrandsAgentMcpConnectionGenerator = tsStrandsAgentMcpConnectionGenerator;
|
|
123
|
+
exports.default = exports.tsStrandsAgentMcpConnectionGenerator;
|
|
124
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/strands-agent/mcp-connection/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
|
+
import { ComponentMetadata } from '../../../utils/nx';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* TypeScript types for options defined in schema.json
|
|
9
|
+
*/
|
|
10
|
+
export interface TsStrandsAgentMcpConnectionGeneratorSchema {
|
|
11
|
+
sourceProject: string;
|
|
12
|
+
targetProject: string;
|
|
13
|
+
sourceComponent?: ComponentMetadata;
|
|
14
|
+
targetComponent?: ComponentMetadata;
|
|
15
|
+
}
|