@aws/nx-plugin 1.0.0-rc.18 → 1.0.0-rc.19

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.
Files changed (87) hide show
  1. package/package.json +1 -1
  2. package/src/py/agent/__snapshots__/generator.spec.ts.snap +15 -6
  3. package/src/py/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +201 -0
  4. package/src/py/agent/a2a-connection/files/agent-connection/app/{__targetAgentSnakeCase___client.py.template → __targetAgentSnakeCase___client_strands.py.template} +7 -5
  5. package/src/py/agent/a2a-connection/generator.js +6 -5
  6. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  7. package/src/py/agent/files/http/main.py.template +2 -2
  8. package/src/py/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +197 -0
  9. package/src/py/agent/gateway-connection/files/agent-connection/app/{__gatewaySnakeCase___client.py.template → __gatewaySnakeCase___client_strands.py.template} +6 -6
  10. package/src/py/agent/gateway-connection/generator.js +5 -5
  11. package/src/py/agent/gateway-connection/generator.js.map +1 -1
  12. package/src/py/agent/generator.js +3 -0
  13. package/src/py/agent/generator.js.map +1 -1
  14. package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +157 -79
  15. package/src/py/agent/mcp-connection/files/agent-connection/app/{__mcpServerSnakeCase___client.py.template → __mcpServerSnakeCase___client_strands.py.template} +7 -5
  16. package/src/py/agent/mcp-connection/generator.js +5 -5
  17. package/src/py/agent/mcp-connection/generator.js.map +1 -1
  18. package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +37 -3
  19. package/src/py/fast-api/files/app/__name__/main.py.template +4 -1
  20. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +13 -4
  21. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +1 -0
  22. package/src/smithy/project/files/src/operations/echo.smithy.template +1 -0
  23. package/src/terraform/project/files/application/src/main.tf.template +6 -1
  24. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +35 -4
  25. package/src/trpc/backend/files/src/procedures/echo.ts.template +1 -1
  26. package/src/trpc/backend/files/src/schema/echo.ts.template +2 -2
  27. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +14 -5
  28. package/src/ts/agent/a2a-connection/__snapshots__/generator.spec.ts.snap +256 -0
  29. package/src/ts/agent/a2a-connection/files/agent-connection/app/{__targetAgentKebabCase__-client.ts.template → __targetAgentKebabCase__-client-strands.ts.template} +5 -5
  30. package/src/ts/agent/a2a-connection/generator.js +3 -3
  31. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  32. package/src/ts/agent/files/http/router.ts.template +1 -1
  33. package/src/ts/agent/gateway-connection/__snapshots__/generator.spec.ts.snap +220 -0
  34. package/src/ts/agent/gateway-connection/files/agent-connection/app/{__gatewayKebabCase__-client.ts.template → __gatewayKebabCase__-client-strands.ts.template} +5 -5
  35. package/src/ts/agent/gateway-connection/generator.js +3 -3
  36. package/src/ts/agent/gateway-connection/generator.js.map +1 -1
  37. package/src/ts/agent/generator.js +3 -0
  38. package/src/ts/agent/generator.js.map +1 -1
  39. package/src/ts/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +183 -110
  40. package/src/ts/agent/mcp-connection/files/agent-connection/app/{__mcpServerKebabCase__-client.ts.template → __mcpServerKebabCase__-client-strands.ts.template} +5 -5
  41. package/src/ts/agent/mcp-connection/generator.js +3 -3
  42. package/src/ts/agent/mcp-connection/generator.js.map +1 -1
  43. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +13 -4
  44. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +64 -24
  45. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +13 -4
  46. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +9 -3
  47. package/src/utils/agent-connection/agent-connection.d.ts +50 -24
  48. package/src/utils/agent-connection/agent-connection.js +137 -45
  49. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  50. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client-config.ts.template +93 -0
  51. package/src/utils/agent-connection/files/core-auth/agentcore-endpoints.ts.template +37 -0
  52. package/src/utils/agent-connection/files/core-auth/agentcore-fetch.ts.template +54 -0
  53. package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-transport.ts.template +41 -0
  54. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-transport.ts.template +70 -0
  55. package/src/utils/agent-connection/files/core-shared/agentcore-transport.ts.template +39 -0
  56. package/src/utils/agent-connection/files/core-strands/a2a/agentcore-a2a-client-strands.ts.template +61 -0
  57. package/src/utils/agent-connection/files/core-strands/gateway/agentcore-gateway-mcp-client-strands.ts.template +26 -0
  58. package/src/utils/agent-connection/files/core-strands/mcp/agentcore-mcp-client-strands.ts.template +27 -0
  59. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client_config.py.template +43 -0
  60. package/src/utils/agent-connection/files/py-core-auth/agentcore_endpoints.py.template +47 -0
  61. package/src/utils/agent-connection/files/py-core-auth/auth/session.py.template +51 -0
  62. package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_transport.py.template +28 -0
  63. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_transport.py.template +34 -0
  64. package/src/utils/agent-connection/files/py-core-shared/agentcore_transport.py.template +40 -0
  65. package/src/utils/agent-connection/files/py-core-strands/a2a/agentcore_a2a_client_strands.py.template +66 -0
  66. package/src/utils/agent-connection/files/py-core-strands/gateway/agentcore_gateway_mcp_client_strands.py.template +22 -0
  67. package/src/utils/agent-connection/files/py-core-strands/mcp/agentcore_mcp_client_strands.py.template +30 -0
  68. package/src/utils/agent-core-constructs/files/terraform/app/agentcore-gateway/__nameKebabCase__/__nameKebabCase__.tf.template +7 -2
  69. package/src/utils/agent-core-constructs/files/terraform/core/agent-core/runtime.tf.template +13 -4
  70. package/src/utils/api-constructs/files/cdk/core/api/http/http-api.ts.template +9 -0
  71. package/src/utils/api-constructs/files/cdk/core/api/rest/rest-api.ts.template +23 -1
  72. package/src/utils/files/terraform/src/core/runtime-config/appconfig-deployment/appconfig-deployment.tf.template +9 -3
  73. package/src/utils/files/terraform/src/core/runtime-config/read/read.tf.template +7 -2
  74. package/src/utils/identity-constructs/files/terraform/core/user-identity/add-callback-url/add-callback-url.tf.template +9 -3
  75. package/src/utils/rdb-constructs/files/terraform/app/dbs/__nameKebabCase__/__nameKebabCase__.tf.template +22 -8
  76. package/src/utils/rdb-constructs/files/terraform/core/rdb/aurora/aurora.tf.template +10 -4
  77. package/src/utils/website-constructs/files/terraform/core/static-website/static-website.tf.template +13 -4
  78. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +0 -123
  79. package/src/utils/agent-connection/files/core-gateway/agentcore-gateway-mcp-client.ts.template +0 -78
  80. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +0 -128
  81. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +0 -120
  82. package/src/utils/agent-connection/files/py-core-gateway/agentcore_gateway_mcp_client.py.template +0 -78
  83. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +0 -89
  84. /package/src/utils/agent-connection/files/{core-runtime-config/model-errors.ts.template → core-strands/base/model-errors-strands.ts.template} +0 -0
  85. /package/src/utils/agent-connection/files/{core-runtime-config/with-session-id.ts.template → core-strands/base/with-session-id-strands.ts.template} +0 -0
  86. /package/src/utils/agent-connection/files/{py-core-runtime-config/model_errors.py.template → py-core-strands/base/model_errors_strands.py.template} +0 -0
  87. /package/src/utils/agent-connection/files/{py-core-runtime-config/with_session_id.py.template → py-core-strands/base/with_session_id_strands.py.template} +0 -0
@@ -1,158 +1,231 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
3
  exports[`ts#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 * from './core/model-errors.js';
6
- export * from './core/with-session-id.js';
4
+ "export * from './app/inventory-mcp-client-strands.js';
5
+ export * from './core/model-errors-strands.js';
6
+ export * from './core/with-session-id-strands.js';
7
7
  export * from './core/session-context.js';
8
8
  // Export your library code here
9
9
  "
10
10
  `;
11
11
 
12
- exports[`ts#agent#mcp-connection generator > should match snapshot for agent-connection src files > agentcore-mcp-client.ts 1`] = `
13
- "import { McpClient } from '@strands-agents/sdk';
14
- import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
15
- import { AwsClient } from 'aws4fetch';
12
+ exports[`ts#agent#mcp-connection generator > should match snapshot for agent-connection src files > agentcore-fetch.ts 1`] = `
13
+ "import { AwsClient } from 'aws4fetch';
16
14
  import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
17
15
  import { getCurrentSessionId } from './session-context.js';
18
16
 
19
17
  const SESSION_HEADER = 'X-Amzn-Bedrock-AgentCore-Runtime-Session-Id';
20
18
 
21
- /**
22
- * Common options for creating an AgentCore MCP client.
23
- */
24
- export interface AgentCoreMcpClientOptions {
25
- /**
26
- * The ARN of the Bedrock AgentCore Runtime to connect to.
27
- */
28
- agentRuntimeArn: string;
19
+ /** Wrap a fetch so each request carries the current async-context session id. */
20
+ const withSessionHeader =
21
+ (inner: typeof fetch): typeof fetch =>
22
+ async (input, init) => {
23
+ const headers = new Headers(init?.headers);
24
+ const sessionId = getCurrentSessionId();
25
+ if (sessionId) headers.set(SESSION_HEADER, sessionId);
26
+ return inner(input, { ...init, headers });
27
+ };
28
+
29
+ /** Options for a SigV4-signing fetch. */
30
+ export interface SigV4FetchOptions {
31
+ /** AWS region to sign for. */
32
+ region: string;
33
+ /** AWS service to sign for. Defaults to \`bedrock-agentcore\`. */
34
+ service?: string;
35
+ /** AWS credential provider; defaults to the standard provider chain. */
36
+ credentialProvider?: ReturnType<typeof fromNodeProviderChain>;
37
+ }
38
+
39
+ /** A fetch that signs every request with AWS SigV4 (per-request, body-aware). */
40
+ export const createSigV4Fetch = (options: SigV4FetchOptions): typeof fetch => {
41
+ const { region, service = 'bedrock-agentcore' } = options;
42
+ const credentialProvider =
43
+ options.credentialProvider ?? fromNodeProviderChain();
44
+ const signedFetch: typeof fetch = async (...args) => {
45
+ const client = new AwsClient({
46
+ ...(await credentialProvider()),
47
+ service,
48
+ region,
49
+ });
50
+ return client.fetch(...args);
51
+ };
52
+ return withSessionHeader(signedFetch);
53
+ };
54
+
55
+ /** A fetch that adds a bearer token from the given async provider. */
56
+ export const createJwtFetch = (
57
+ accessTokenProvider: () => Promise<string>,
58
+ ): typeof fetch =>
59
+ withSessionHeader(async (input, init) => {
60
+ const headers = new Headers(init?.headers);
61
+ headers.set('Authorization', \`Bearer \${await accessTokenProvider()}\`);
62
+ return fetch(input, { ...init, headers });
63
+ });
64
+
65
+ /** A plain fetch (local dev) that still forwards the session id. */
66
+ export const createPlainFetch = (): typeof fetch => withSessionHeader(fetch);
67
+ "
68
+ `;
69
+
70
+ exports[`ts#agent#mcp-connection generator > should match snapshot for agent-connection src files > agentcore-mcp-client-strands.ts 1`] = `
71
+ "import { McpClient } from '@strands-agents/sdk';
72
+ import {
73
+ AgentCoreMcpTransport,
74
+ type AgentCoreMcpTransportIamOptions,
75
+ type AgentCoreMcpTransportJwtOptions,
76
+ type AgentCoreMcpTransportNoAuthOptions,
77
+ } from './agentcore-mcp-transport.js';
78
+
79
+ /** Strands MCP clients for a Bedrock AgentCore runtime. */
80
+ export class AgentCoreMcpClientStrands {
81
+ /** SigV4-authenticated client for a Bedrock AgentCore runtime. */
82
+ static withIamAuth(options: AgentCoreMcpTransportIamOptions): McpClient {
83
+ return new McpClient({
84
+ transport: AgentCoreMcpTransport.withIamAuth(options),
85
+ });
86
+ }
87
+
88
+ /** Bearer-authenticated client for a Bedrock AgentCore runtime. */
89
+ static withJwtAuth(options: AgentCoreMcpTransportJwtOptions): McpClient {
90
+ return new McpClient({
91
+ transport: AgentCoreMcpTransport.withJwtAuth(options),
92
+ });
93
+ }
94
+
95
+ /** For local dev — plain HTTP, no auth. */
96
+ static withoutAuth(options: AgentCoreMcpTransportNoAuthOptions): McpClient {
97
+ return new McpClient({
98
+ transport: AgentCoreMcpTransport.withoutAuth(options),
99
+ });
100
+ }
29
101
  }
102
+ "
103
+ `;
104
+
105
+ exports[`ts#agent#mcp-connection generator > should match snapshot for agent-connection src files > agentcore-mcp-transport.ts 1`] = `
106
+ "import type { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
107
+ import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
108
+ import { mcpUrlFromArn, regionFromArn } from './agentcore-endpoints.js';
109
+ import {
110
+ sigV4Transport,
111
+ jwtTransport,
112
+ noAuthTransport,
113
+ } from './agentcore-transport.js';
30
114
 
31
115
  /**
32
- * Options for creating an AgentCore MCP client with IAM authentication.
116
+ * Options for an MCP transport with IAM authentication.
33
117
  */
34
- export interface AgentCoreMcpClientIamOptions
35
- extends AgentCoreMcpClientOptions {
36
- /**
37
- * Optional AWS credential provider. If not provided, uses the default
38
- * credential provider chain from the AWS SDK.
39
- */
118
+ export interface AgentCoreMcpTransportIamOptions {
119
+ /** The ARN of the Bedrock AgentCore Runtime to connect to. */
120
+ agentRuntimeArn: string;
121
+ /** AWS credential provider; defaults to the standard provider chain. */
40
122
  credentialProvider?: ReturnType<typeof fromNodeProviderChain>;
41
123
  }
42
124
 
43
125
  /**
44
- * Options for creating an AgentCore MCP client with JWT authentication.
126
+ * Options for an MCP transport with JWT authentication.
45
127
  */
46
- export interface AgentCoreMcpClientJwtOptions
47
- extends AgentCoreMcpClientOptions {
48
- /**
49
- * A function which returns the JWT access token used to authenticate.
50
- */
128
+ export interface AgentCoreMcpTransportJwtOptions {
129
+ /** The ARN of the Bedrock AgentCore Runtime to connect to. */
130
+ agentRuntimeArn: string;
131
+ /** A function which returns the JWT access token used to authenticate. */
51
132
  accessTokenProvider: () => Promise<string>;
52
133
  }
53
134
 
54
135
  /**
55
- * Options for creating an MCP client with no auth (local dev).
136
+ * Options for an MCP transport with no auth (local dev).
56
137
  */
57
- export interface AgentCoreMcpClientNoAuthOptions {
138
+ export interface AgentCoreMcpTransportNoAuthOptions {
58
139
  /** Full URL of the local MCP endpoint. */
59
140
  url: string;
60
141
  }
61
142
 
62
- interface CreateOptions {
63
- url: string;
64
- buildHeaders?: () => Promise<Record<string, string>>;
65
- fetch?: typeof fetch;
66
- }
67
-
68
- /** Factory for MCP clients that forward the current async-context session. */
69
- export class AgentCoreMcpClient {
70
- /**
71
- * Construct the invocation URL for an AgentCore runtime ARN and extract
72
- * the region. ARN format: arn:partition:service:region:account-id:resource
73
- */
74
- private static buildUrl(agentRuntimeArn: string): {
75
- region: string;
76
- url: string;
77
- } {
78
- const region = agentRuntimeArn.split(':')[3];
79
- const url = \`https://bedrock-agentcore.\${region}.amazonaws.com/runtimes/\${encodeURIComponent(agentRuntimeArn)}/invocations?qualifier=DEFAULT\`;
80
- return { region, url };
81
- }
82
-
83
- private static create(options: CreateOptions): McpClient {
84
- const {
85
- url,
86
- buildHeaders = async (): Promise<Record<string, string>> => ({}),
87
- fetch: customFetch,
88
- } = options;
89
- const fetchWithHeaders: typeof fetch = async (input, init) => {
90
- const headers = new Headers(init?.headers);
91
- const sessionId = getCurrentSessionId();
92
- if (sessionId) headers.set(SESSION_HEADER, sessionId);
93
- const extra = await buildHeaders();
94
- for (const k of Object.keys(extra)) {
95
- headers.set(k, extra[k]);
96
- }
97
- return (customFetch ?? fetch)(input, { ...init, headers });
98
- };
99
- const transport = new StreamableHTTPClientTransport(new URL(url), {
100
- fetch: fetchWithHeaders,
143
+ /** Factory for MCP transports that connect to a Bedrock AgentCore runtime. */
144
+ export class AgentCoreMcpTransport {
145
+ /** SigV4-authenticated transport for a Bedrock AgentCore runtime. */
146
+ static withIamAuth(
147
+ options: AgentCoreMcpTransportIamOptions,
148
+ ): StreamableHTTPClientTransport {
149
+ return sigV4Transport({
150
+ region: regionFromArn(options.agentRuntimeArn),
151
+ url: mcpUrlFromArn(options.agentRuntimeArn),
152
+ credentialProvider: options.credentialProvider,
101
153
  });
102
- return new McpClient({ transport });
103
- }
104
-
105
- /**
106
- * SigV4-authenticated client for a Bedrock AgentCore runtime.
107
- */
108
- static withIamAuth(options: AgentCoreMcpClientIamOptions): McpClient {
109
- const { region, url } = AgentCoreMcpClient.buildUrl(
110
- options.agentRuntimeArn,
111
- );
112
- const credentialProvider =
113
- options.credentialProvider ?? fromNodeProviderChain();
114
- const sigv4Fetch: typeof fetch = async (...args) => {
115
- const client = new AwsClient({
116
- ...(await credentialProvider()),
117
- service: 'bedrock-agentcore',
118
- region,
119
- });
120
- return client.fetch(...args);
121
- };
122
- return AgentCoreMcpClient.create({ url, fetch: sigv4Fetch });
123
154
  }
124
155
 
125
- /**
126
- * Bearer-authenticated client for a Bedrock AgentCore runtime.
127
- */
128
- static withJwtAuth(options: AgentCoreMcpClientJwtOptions): McpClient {
129
- const { url } = AgentCoreMcpClient.buildUrl(options.agentRuntimeArn);
130
- return AgentCoreMcpClient.create({
131
- url,
132
- buildHeaders: async () => ({
133
- Authorization: \`Bearer \${await options.accessTokenProvider()}\`,
134
- }),
156
+ /** Bearer-authenticated transport for a Bedrock AgentCore runtime. */
157
+ static withJwtAuth(
158
+ options: AgentCoreMcpTransportJwtOptions,
159
+ ): StreamableHTTPClientTransport {
160
+ return jwtTransport({
161
+ url: mcpUrlFromArn(options.agentRuntimeArn),
162
+ accessTokenProvider: options.accessTokenProvider,
135
163
  });
136
164
  }
137
165
 
138
166
  /** For local dev — plain HTTP, no auth. */
139
- static withoutAuth(options: AgentCoreMcpClientNoAuthOptions): McpClient {
140
- return AgentCoreMcpClient.create({ url: options.url });
167
+ static withoutAuth(
168
+ options: AgentCoreMcpTransportNoAuthOptions,
169
+ ): StreamableHTTPClientTransport {
170
+ return noAuthTransport({ url: options.url });
141
171
  }
142
172
  }
143
173
  "
144
174
  `;
145
175
 
146
- exports[`ts#agent#mcp-connection generator > should match snapshot for agent-connection src files > inventory-mcp-client.ts 1`] = `
176
+ exports[`ts#agent#mcp-connection generator > should match snapshot for agent-connection src files > agentcore-transport.ts 1`] = `
177
+ "import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
178
+ import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
179
+ import {
180
+ createSigV4Fetch,
181
+ createJwtFetch,
182
+ createPlainFetch,
183
+ } from './agentcore-fetch.js';
184
+
185
+ const build = (
186
+ url: string,
187
+ fetchFn: typeof fetch,
188
+ ): StreamableHTTPClientTransport =>
189
+ new StreamableHTTPClientTransport(new URL(url), { fetch: fetchFn });
190
+
191
+ /** SigV4-signed transport for a resolved AgentCore endpoint. */
192
+ export const sigV4Transport = (options: {
193
+ region: string;
194
+ url: string;
195
+ credentialProvider?: ReturnType<typeof fromNodeProviderChain>;
196
+ }): StreamableHTTPClientTransport =>
197
+ build(
198
+ options.url,
199
+ createSigV4Fetch({
200
+ region: options.region,
201
+ credentialProvider: options.credentialProvider,
202
+ }),
203
+ );
204
+
205
+ /** Bearer-token transport for a resolved AgentCore endpoint. */
206
+ export const jwtTransport = (options: {
207
+ url: string;
208
+ accessTokenProvider: () => Promise<string>;
209
+ }): StreamableHTTPClientTransport =>
210
+ build(options.url, createJwtFetch(options.accessTokenProvider));
211
+
212
+ /** Plain-HTTP transport — for local dev. */
213
+ export const noAuthTransport = (options: {
214
+ url: string;
215
+ }): StreamableHTTPClientTransport => build(options.url, createPlainFetch());
216
+ "
217
+ `;
218
+
219
+ exports[`ts#agent#mcp-connection generator > should match snapshot for agent-connection src files > inventory-mcp-client-strands.ts 1`] = `
147
220
  "import { McpClient } from '@strands-agents/sdk';
148
- import { AgentCoreMcpClient } from '../core/agentcore-mcp-client.js';
221
+ import { AgentCoreMcpClientStrands } from '../core/agentcore-mcp-client-strands.js';
149
222
  import { getAgentCoreRuntimeConfig } from '../core/runtime-config.js';
150
223
 
151
- /** Client for the InventoryMcp MCP server. */
152
- export class InventoryMcpClient {
224
+ /** Strands client for the InventoryMcp MCP server. */
225
+ export class InventoryMcpClientStrands {
153
226
  static async create(): Promise<McpClient> {
154
227
  if (process.env.SERVE_LOCAL === 'true') {
155
- return AgentCoreMcpClient.withoutAuth({
228
+ return AgentCoreMcpClientStrands.withoutAuth({
156
229
  url: 'http://localhost:8082/mcp',
157
230
  });
158
231
  }
@@ -163,14 +236,14 @@ export class InventoryMcpClient {
163
236
  \`No connected MCP server runtime named 'InventoryMcp' found in runtime configuration.\`,
164
237
  );
165
238
  }
166
- return AgentCoreMcpClient.withIamAuth({ agentRuntimeArn });
239
+ return AgentCoreMcpClientStrands.withIamAuth({ agentRuntimeArn });
167
240
  }
168
241
  }
169
242
  "
170
243
  `;
171
244
 
172
245
  exports[`ts#agent#mcp-connection generator > should match snapshot for agent-connection src files > transformed-agent.ts 1`] = `
173
- "import { InventoryMcpClient } from ':proj/agent-connection';
246
+ "import { InventoryMcpClientStrands } from ':proj/agent-connection';
174
247
  import { Agent, tool } from '@strands-agents/sdk';
175
248
  import { z } from 'zod';
176
249
 
@@ -182,7 +255,7 @@ const multiply = tool({
182
255
  });
183
256
 
184
257
  export const getAgent = async (sessionId: string) => {
185
- const inventoryMcp = await InventoryMcpClient.create();
258
+ const inventoryMcp = await InventoryMcpClientStrands.create();
186
259
  return new Agent({
187
260
  systemPrompt: 'You are a mathematical wizard.',
188
261
  tools: [inventoryMcp, multiply],
@@ -1,12 +1,12 @@
1
1
  import { McpClient } from '@strands-agents/sdk';
2
- import { AgentCoreMcpClient } from '../core/agentcore-mcp-client.js';
2
+ import { AgentCoreMcpClientStrands } from '../core/agentcore-mcp-client-strands.js';
3
3
  import { getAgentCoreRuntimeConfig } from '../core/runtime-config.js';
4
4
 
5
- /** Client for the <%- mcpServerClassName %> MCP server. */
6
- export class <%- mcpServerClassName %>Client {
5
+ /** Strands client for the <%- mcpServerClassName %> MCP server. */
6
+ export class <%- mcpServerClassName %>ClientStrands {
7
7
  static async create(): Promise<McpClient> {
8
8
  if (process.env.SERVE_LOCAL === 'true') {
9
- return AgentCoreMcpClient.withoutAuth({
9
+ return AgentCoreMcpClientStrands.withoutAuth({
10
10
  url: 'http://localhost:<%- mcpServerPort %>/mcp',
11
11
  });
12
12
  }
@@ -17,6 +17,6 @@ export class <%- mcpServerClassName %>Client {
17
17
  `No connected MCP server runtime named '<%- mcpServerClassName %>' found in runtime configuration.`,
18
18
  );
19
19
  }
20
- return AgentCoreMcpClient.withIamAuth({ agentRuntimeArn });
20
+ return AgentCoreMcpClientStrands.withIamAuth({ agentRuntimeArn });
21
21
  }
22
22
  }
@@ -33,7 +33,7 @@ const tsAgentMcpConnectionGenerator = async (tree, options) => {
33
33
  const npmScope = (0, npm_scope_1.getNpmScope)(tree);
34
34
  // 1. Ensure the shared agent-connection project exists + has the MCP core client
35
35
  await (0, agent_connection_1.ensureTypeScriptAgentConnectionProject)(tree);
36
- (0, agent_connection_1.addTypeScriptCoreClient)(tree, 'mcp');
36
+ await (0, agent_connection_1.addTypeScriptCoreClient)(tree, 'mcp');
37
37
  // 2. Generate the per-connection <Name>Client into app/
38
38
  (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'), {
39
39
  mcpServerKebabCase,
@@ -41,12 +41,12 @@ const tsAgentMcpConnectionGenerator = async (tree, options) => {
41
41
  mcpServerPort,
42
42
  }, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
43
43
  // Add re-export to index.ts
44
- await (0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(agent_connection_1.AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'), `./app/${mcpServerKebabCase}-client.js`);
44
+ await (0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(agent_connection_1.AGENT_CONNECTION_PROJECT_DIR, 'src', 'index.ts'), `./app/${mcpServerKebabCase}-client-strands.js`);
45
45
  // 3. AST transform agent.ts to add MCP tools
46
46
  const agentSourceDir = (0, devkit_1.joinPathFragments)(sourceProject.root, agentComponent.path ?? 'src');
47
47
  const agentFilePath = (0, devkit_1.joinPathFragments)(agentSourceDir, 'agent.ts');
48
48
  if (tree.exists(agentFilePath)) {
49
- const clientClassName = `${mcpServerClassName}Client`;
49
+ const clientClassName = `${mcpServerClassName}ClientStrands`;
50
50
  const clientVarName = mcpServerClassName.charAt(0).toLowerCase() + mcpServerClassName.slice(1);
51
51
  // Add import for the client
52
52
  await (0, ast_1.addDestructuredImport)(tree, agentFilePath, [clientClassName], `:${npmScope}/agent-connection`);
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/agent/mcp-connection/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/agent/mcp-connection/generator.ts"],"names":[],"mappings":"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"}
@@ -412,14 +412,19 @@ resource "null_resource" "docker_publish" {
412
412
  provisioner "local-exec" {
413
413
  command = <<-EOT
414
414
  # Get ECR login token
415
- aws ecr get-login-password --region \${local.aws_region} | docker login --username AWS --password-stdin \${self.triggers.repository_url}
415
+ aws ecr get-login-password --region "$AWS_REGION" | docker login --username AWS --password-stdin "$REPOSITORY_URL"
416
416
 
417
417
  # Tag the image
418
- docker tag \${self.triggers.docker_image_tag} \${self.triggers.repository_url}:latest
418
+ docker tag "$DOCKER_IMAGE_TAG" "$REPOSITORY_URL:latest"
419
419
 
420
420
  # Push the image
421
- docker push \${self.triggers.repository_url}:latest
421
+ docker push "$REPOSITORY_URL:latest"
422
422
  EOT
423
+ environment = {
424
+ AWS_REGION = local.aws_region
425
+ REPOSITORY_URL = self.triggers.repository_url
426
+ DOCKER_IMAGE_TAG = self.triggers.docker_image_tag
427
+ }
423
428
  }
424
429
 
425
430
  depends_on = [aws_ecr_repository_policy.agent_core_ecr_policy]
@@ -481,10 +486,11 @@ resource "null_resource" "runtime_ready" {
481
486
  uv run --with boto3 python -c "
482
487
  import boto3
483
488
  import json
489
+ import os
484
490
  import time
485
491
  import uuid
486
492
 
487
- runtime_arn = '\${self.triggers.runtime_arn}'
493
+ runtime_arn = os.environ['RUNTIME_ARN']
488
494
  client = boto3.client('bedrock-agentcore')
489
495
  initialize_request = json.dumps({
490
496
  'jsonrpc': '2.0',
@@ -516,6 +522,9 @@ while True:
516
522
  print(f'Runtime {runtime_arn} is serving MCP')
517
523
  "
518
524
  EOT
525
+ environment = {
526
+ RUNTIME_ARN = self.triggers.runtime_arn
527
+ }
519
528
  }
520
529
  }
521
530