@aws/nx-plugin-mcp 1.0.0-rc.7 → 1.0.0-rc.71

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 (195) hide show
  1. package/bin/aws-nx-mcp.js +12317 -10933
  2. package/docs/get_started/building-with-ai.mdx +116 -0
  3. package/docs/get_started/concepts.mdx +67 -0
  4. package/docs/get_started/existing-project.mdx +180 -0
  5. package/docs/get_started/graph-builder.mdx +39 -0
  6. package/docs/get_started/quick-start.mdx +277 -0
  7. package/docs/get_started/tutorials/contribute-generator.mdx +408 -0
  8. package/docs/get_started/tutorials/dungeon-game/1.mdx +1301 -0
  9. package/docs/get_started/tutorials/dungeon-game/2.mdx +237 -0
  10. package/docs/get_started/tutorials/dungeon-game/3.mdx +76 -0
  11. package/docs/get_started/tutorials/dungeon-game/4.mdx +164 -0
  12. package/docs/get_started/tutorials/dungeon-game/overview.mdx +145 -0
  13. package/docs/get_started/tutorials/dungeon-game/wrap-up.mdx +41 -0
  14. package/docs/get_started/tutorials/existing-project.mdx +4 -0
  15. package/docs/get_started/upgrading.mdx +147 -0
  16. package/docs/guides/agentcore-gateway.mdx +490 -0
  17. package/docs/guides/agentcore-harness.mdx +275 -0
  18. package/docs/guides/astro-docs.mdx +8 -0
  19. package/docs/guides/connection/agentcore-gateway-agent.mdx +222 -0
  20. package/docs/guides/connection/agentcore-gateway-gateway.mdx +154 -0
  21. package/docs/guides/connection/agentcore-gateway-mcp.mdx +134 -0
  22. package/docs/guides/connection/py-agent-a2a.mdx +48 -16
  23. package/docs/guides/connection/py-agent-dynamodb.mdx +116 -0
  24. package/docs/guides/connection/py-agent-gateway.mdx +178 -0
  25. package/docs/guides/connection/py-agent-mcp.mdx +43 -14
  26. package/docs/guides/connection/py-agent-rdb.mdx +178 -0
  27. package/docs/guides/connection/py-fast-api-dynamodb.mdx +56 -0
  28. package/docs/guides/connection/py-fast-api-rdb.mdx +184 -0
  29. package/docs/guides/connection/py-mcp-server-dynamodb.mdx +116 -0
  30. package/docs/guides/connection/py-mcp-server-rdb.mdx +187 -0
  31. package/docs/guides/connection/react-agentcore-gateway.mdx +112 -0
  32. package/docs/guides/connection/react-agui.mdx +13 -13
  33. package/docs/guides/connection/react-fastapi.mdx +38 -2
  34. package/docs/guides/connection/react-py-agent.mdx +9 -15
  35. package/docs/guides/connection/react-smithy.mdx +3 -3
  36. package/docs/guides/connection/react-trpc.mdx +1 -1
  37. package/docs/guides/connection/react-ts-agent.mdx +8 -8
  38. package/docs/guides/connection/smithy-dynamodb.mdx +5 -5
  39. package/docs/guides/connection/smithy-rdb.mdx +9 -9
  40. package/docs/guides/connection/trpc-dynamodb.mdx +5 -5
  41. package/docs/guides/connection/trpc-rdb.mdx +6 -6
  42. package/docs/guides/connection/ts-agent-a2a.mdx +14 -11
  43. package/docs/guides/connection/ts-agent-dynamodb.mdx +5 -5
  44. package/docs/guides/connection/ts-agent-gateway.mdx +143 -0
  45. package/docs/guides/connection/ts-agent-mcp.mdx +12 -9
  46. package/docs/guides/connection/ts-agent-rdb.mdx +70 -25
  47. package/docs/guides/connection/ts-mcp-server-dynamodb.mdx +5 -5
  48. package/docs/guides/connection/ts-mcp-server-rdb.mdx +68 -18
  49. package/docs/guides/connection.mdx +122 -5
  50. package/docs/guides/docker-bundling.mdx +69 -12
  51. package/docs/guides/fastapi.mdx +249 -9
  52. package/docs/guides/local-development.mdx +87 -0
  53. package/docs/guides/nx-generator.mdx +4 -3
  54. package/docs/guides/nx-migration.mdx +165 -0
  55. package/docs/guides/py-agent.mdx +264 -49
  56. package/docs/guides/py-dynamodb.mdx +476 -0
  57. package/docs/guides/py-mcp-server.mdx +61 -2
  58. package/docs/guides/py-rdb.mdx +265 -0
  59. package/docs/guides/python-lambda-function.mdx +1 -1
  60. package/docs/guides/react-website-auth.mdx +65 -4
  61. package/docs/guides/react-website.mdx +149 -30
  62. package/docs/guides/runtime-config.mdx +1 -1
  63. package/docs/guides/security.mdx +75 -0
  64. package/docs/guides/smithy-project.mdx +167 -0
  65. package/docs/guides/terraform-project.mdx +2 -2
  66. package/docs/guides/trpc.mdx +53 -16
  67. package/docs/guides/ts-agent.mdx +183 -10
  68. package/docs/guides/ts-dcr-proxy.mdx +569 -0
  69. package/docs/guides/ts-dynamodb.mdx +66 -242
  70. package/docs/guides/ts-lambda-function.mdx +1 -1
  71. package/docs/guides/ts-mcp-server.mdx +109 -29
  72. package/docs/guides/ts-nx-plugin.mdx +3 -3
  73. package/docs/guides/ts-rdb.mdx +113 -467
  74. package/docs/guides/ts-smithy-api.mdx +258 -18
  75. package/docs/guides/typescript-infrastructure.mdx +46 -24
  76. package/docs/guides/typescript-project.mdx +134 -27
  77. package/docs/guides/workspace.mdx +10 -3
  78. package/docs/snippets/agent/architecture.mdx +1 -1
  79. package/docs/snippets/agent/bedrock-deployment.mdx +9 -5
  80. package/docs/snippets/agent/runtime-arn.mdx +23 -2
  81. package/docs/snippets/agent/securing-your-agent.mdx +39 -0
  82. package/docs/snippets/api/access-logging.mdx +33 -0
  83. package/docs/snippets/api/cors-configuration-cdk-note.mdx +1 -1
  84. package/docs/snippets/api/cors-configuration-terraform-note.mdx +1 -1
  85. package/docs/snippets/api/type-safe-api-integrations.mdx +33 -2
  86. package/docs/snippets/api/waf-configuration.mdx +3 -3
  87. package/docs/snippets/connection/a2a-infrastructure.mdx +1 -1
  88. package/docs/snippets/connection/dynamodb-local-development.mdx +2 -2
  89. package/docs/snippets/connection/lambda-dynamodb-access.mdx +1 -1
  90. package/docs/snippets/connection/py-dynamodb-local-development.mdx +7 -0
  91. package/docs/snippets/connection/py-lambda-rdb-ssl-requirements.mdx +7 -0
  92. package/docs/snippets/connection/rdb-api-infrastructure.mdx +51 -19
  93. package/docs/snippets/dynamodb/deploying-table.mdx +166 -0
  94. package/docs/snippets/dynamodb/gsi-config.mdx +38 -0
  95. package/docs/snippets/dynamodb/infrastructure.mdx +33 -0
  96. package/docs/snippets/dynamodb/local-dev-start.mdx +13 -0
  97. package/docs/snippets/dynamodb/local-dev-windows.mdx +15 -0
  98. package/docs/snippets/lambda-function/deploying-your-function.mdx +3 -3
  99. package/docs/snippets/mcp/architecture.mdx +1 -1
  100. package/docs/snippets/mcp/bedrock-deployment.mdx +9 -5
  101. package/docs/snippets/mcp/config.mdx +3 -2
  102. package/docs/snippets/pdk-migration/example/01-migrate-api.mdx +7 -5
  103. package/docs/snippets/pdk-migration/example/02-migrate-website.mdx +29 -10
  104. package/docs/snippets/pdk-migration/example/03-migrate-infra.mdx +4 -4
  105. package/docs/snippets/pdk-migration/faq/type-safe-api.mdx +5 -111
  106. package/docs/snippets/prerequisites.mdx +1 -4
  107. package/docs/snippets/rdb/architecture.mdx +38 -0
  108. package/docs/snippets/rdb/cluster-instances.mdx +31 -0
  109. package/docs/snippets/rdb/deletion-protection.mdx +34 -0
  110. package/docs/snippets/rdb/deploying.mdx +187 -0
  111. package/docs/snippets/rdb/encryption-key-rotation.mdx +30 -0
  112. package/docs/snippets/rdb/engine-version.mdx +63 -0
  113. package/docs/snippets/rdb/infrastructure.mdx +35 -0
  114. package/docs/snippets/rdb/logging-mysql.mdx +5 -0
  115. package/docs/snippets/rdb/logging-postgres.mdx +5 -0
  116. package/docs/snippets/rdb/performance-insights.mdx +34 -0
  117. package/docs/snippets/rdb/rds-proxy.mdx +50 -0
  118. package/docs/snippets/rdb/removal-policy.mdx +57 -0
  119. package/docs/snippets/rdb/serverless-capacity.mdx +32 -0
  120. package/docs/snippets/recommended-prerequisites.mdx +10 -0
  121. package/docs/snippets/required-prerequisites.mdx +1 -4
  122. package/docs/snippets/runtime-config-app-id-note.mdx +8 -0
  123. package/docs/snippets/shared-constructs.mdx +1 -1
  124. package/docs/snippets/trivy-image-scan.mdx +37 -0
  125. package/generators.json +152 -10
  126. package/package.json +1 -1
  127. package/src/agentcore-gateway/agent-connection/schema.json +31 -0
  128. package/src/agentcore-gateway/gateway-connection/schema.json +31 -0
  129. package/src/agentcore-gateway/mcp-connection/schema.json +31 -0
  130. package/src/agentcore-gateway/react-connection/schema.json +31 -0
  131. package/src/agentcore-gateway/schema.json +72 -0
  132. package/src/agentcore-harness/schema.json +53 -0
  133. package/src/connection/schema.json +5 -0
  134. package/src/infra/app/schema.json +5 -0
  135. package/src/init/schema.json +35 -0
  136. package/src/internal/test-matrix/schema.json +21 -0
  137. package/src/license/schema.json +5 -0
  138. package/src/preset/schema.json +16 -5
  139. package/src/py/agent/a2a-connection/schema.json +5 -0
  140. package/src/py/agent/gateway-connection/schema.json +31 -0
  141. package/src/py/agent/mcp-connection/schema.json +5 -0
  142. package/src/py/agent/react-connection/schema.json +5 -0
  143. package/src/py/agent/schema.json +15 -1
  144. package/src/py/api/schema.json +5 -0
  145. package/src/py/dynamodb/agent-connection/schema.json +27 -0
  146. package/src/py/dynamodb/fast-api-connection/schema.json +23 -0
  147. package/src/py/dynamodb/mcp-server-connection/schema.json +27 -0
  148. package/src/py/dynamodb/schema.json +76 -0
  149. package/src/py/fast-api/react/schema.json +5 -0
  150. package/src/py/fast-api/schema.json +6 -0
  151. package/src/py/lambda-function/schema.json +5 -0
  152. package/src/py/mcp-server/schema.json +6 -0
  153. package/src/py/project/schema.json +5 -0
  154. package/src/py/rdb/agent-connection/schema.json +27 -0
  155. package/src/py/rdb/fast-api-connection/schema.json +23 -0
  156. package/src/py/rdb/mcp-server-connection/schema.json +27 -0
  157. package/src/py/rdb/schema.json +78 -0
  158. package/src/smithy/project/schema.json +28 -1
  159. package/src/smithy/react-connection/schema.json +5 -0
  160. package/src/smithy/ts/api/schema.json +6 -0
  161. package/src/terraform/project/schema.json +5 -0
  162. package/src/trpc/backend/schema.json +6 -0
  163. package/src/trpc/react/schema.json +5 -0
  164. package/src/ts/agent/a2a-connection/schema.json +5 -0
  165. package/src/ts/agent/gateway-connection/schema.json +31 -0
  166. package/src/ts/agent/mcp-connection/schema.json +5 -0
  167. package/src/ts/agent/react-connection/schema.json +5 -0
  168. package/src/ts/agent/schema.json +14 -0
  169. package/src/ts/api/schema.json +5 -0
  170. package/src/ts/astro-docs/schema.json +3 -3
  171. package/src/ts/dcr-proxy/schema.json +44 -0
  172. package/src/ts/docs/schema.json +3 -3
  173. package/src/ts/dynamodb/agent-connection/schema.json +5 -0
  174. package/src/ts/dynamodb/mcp-server-connection/schema.json +5 -0
  175. package/src/ts/dynamodb/schema.json +26 -2
  176. package/src/ts/dynamodb/smithy-connection/schema.json +5 -0
  177. package/src/ts/dynamodb/trpc-connection/schema.json +5 -0
  178. package/src/ts/lambda-function/schema.json +5 -0
  179. package/src/ts/lib/schema.json +5 -0
  180. package/src/ts/mcp-server/schema.json +6 -0
  181. package/src/ts/nx-generator/schema.json +5 -0
  182. package/src/ts/nx-migration/schema.json +63 -0
  183. package/src/ts/nx-plugin/schema.json +5 -0
  184. package/src/ts/rdb/agent-connection/schema.json +5 -0
  185. package/src/ts/rdb/mcp-server-connection/schema.json +5 -0
  186. package/src/ts/rdb/schema.json +7 -1
  187. package/src/ts/rdb/smithy-connection/schema.json +5 -0
  188. package/src/ts/rdb/trpc-connection/schema.json +5 -0
  189. package/src/ts/react-website/app/schema.json +12 -6
  190. package/src/ts/react-website/cognito-auth/schema.json +5 -0
  191. package/src/ts/react-website/runtime-config/schema.json +5 -0
  192. package/src/ts/website/app/schema.json +11 -6
  193. package/src/ts/website/auth/schema.json +5 -0
  194. /package/docs/snippets/connection/{lambda-rdb-ssl-requirements.mdx → ts-lambda-rdb-ssl-requirements.mdx} +0 -0
  195. /package/docs/snippets/connection/{mcp-server-rdb-ssl-requirements.mdx → ts-mcp-server-rdb-ssl-requirements.mdx} +0 -0
@@ -18,7 +18,7 @@ The `connection` generator wires a <Link path="guides/ts-smithy-api">Smithy API<
18
18
 
19
19
  Before using this generator, ensure you have:
20
20
 
21
- 1. A <Link path="guides/ts-smithy-api">`ts#smithy-api`</Link> project (TypeScript backend)
21
+ 1. A <Link path="guides/ts-smithy-api">Smithy TypeScript API</Link> project (generated with `ts#api` using `--framework=smithy`)
22
22
  2. A <Link path="guides/ts-rdb">`ts#rdb`</Link> project
23
23
 
24
24
  ## Usage
@@ -46,7 +46,7 @@ The generator modifies three existing files in your Smithy API backend:
46
46
 
47
47
  </FileTree>
48
48
 
49
- Additionally, it updates the API's `serve-local` target to start the database automatically.
49
+ Additionally, it updates the API's `dev` target to start the database automatically.
50
50
 
51
51
  ## How It Works
52
52
 
@@ -55,7 +55,7 @@ Additionally, it updates the API's `serve-local` target to start the database au
55
55
  The generator adds a typed `db` property to `ServiceContext` in `context.ts`:
56
56
 
57
57
  ```ts title="packages/api/src/context.ts" {1,7}
58
- import { getPrisma as getMyDb } from ':my-scope/my-db';
58
+ import { getPrisma as getMyDb } from '@my-scope/my-db';
59
59
 
60
60
  export interface ServiceContext {
61
61
  tracer: Tracer;
@@ -69,8 +69,8 @@ export interface ServiceContext {
69
69
 
70
70
  The Prisma client is instantiated inside `lambdaHandler` and passed through the service context:
71
71
 
72
- ```ts title="packages/api/src/handler.ts" {1,10}
73
- import { getPrisma as getMyDb } from ':my-scope/my-db';
72
+ ```ts title="packages/api/src/handler.ts" {1,5,10}
73
+ import { getPrisma as getMyDb } from '@my-scope/my-db';
74
74
 
75
75
  export const lambdaHandler = async (event: APIGatewayProxyEvent) => {
76
76
  const httpRequest = convertEvent(event);
@@ -134,14 +134,14 @@ const httpResponse = await serviceHandler.handle(httpRequest, {
134
134
 
135
135
  ### SSL Requirements When Connecting Without RDS Proxy
136
136
 
137
- <Snippet name="connection/lambda-rdb-ssl-requirements" parentHeading="SSL Requirements When Connecting Without RDS Proxy" />
137
+ <Snippet name="connection/ts-lambda-rdb-ssl-requirements" parentHeading="SSL Requirements When Connecting Without RDS Proxy" />
138
138
 
139
139
  ## Local Development
140
140
 
141
141
  The generator applies the same Prisma client injection inside the request handler in `local-server.ts`:
142
142
 
143
143
  ```ts title="packages/api/src/local-server.ts" {1,5,10}
144
- import { getPrisma as getMyDb } from ':my-scope/my-db';
144
+ import { getPrisma as getMyDb } from '@my-scope/my-db';
145
145
 
146
146
  const server = createServer(async function (req, res) {
147
147
  const httpRequest = convertRequest(req);
@@ -156,6 +156,6 @@ const server = createServer(async function (req, res) {
156
156
  });
157
157
  ```
158
158
 
159
- <NxCommands commands={["serve-local <api-project-name>"]} />
159
+ <NxCommands commands={["dev <api-project-name>"]} />
160
160
 
161
- This starts both the API and the local database. The `SERVE_LOCAL=true` environment variable is set automatically, so the Prisma client connects to the local Docker database instead of Aurora.
161
+ This starts both the API and the local database. The `LOCAL_DEV=true` environment variable is set automatically, so the Prisma client connects to the local Docker database instead of Aurora.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: tRPC API to DynamoDB
3
- description: Connect a tRPC API to a DynamoDB table
3
+ description: Connect a tRPC API to a TypeScript DynamoDB project
4
4
  when:
5
5
  sourceType: ts#trpc-api
6
6
  targetType: ts#dynamodb
@@ -12,13 +12,13 @@ import GeneratorParameters from '@components/generator-parameters.astro';
12
12
  import NxCommands from '@components/nx-commands.astro';
13
13
  import Snippet from '@components/snippet.astro';
14
14
 
15
- The `connection` generator wires a <Link path="guides/trpc">tRPC API</Link> to a <Link path="guides/ts-dynamodb">DynamoDB</Link> project, configuring local development so both start together automatically.
15
+ The `connection` generator wires a <Link path="guides/trpc">tRPC API</Link> to a <Link path="guides/ts-dynamodb">TypeScript DynamoDB</Link> project, configuring local development so both start together automatically.
16
16
 
17
17
  ## Prerequisites
18
18
 
19
19
  Before using this generator, ensure you have:
20
20
 
21
- 1. A <Link path="guides/trpc">`ts#trpc-api`</Link> project
21
+ 1. A <Link path="guides/trpc">tRPC API</Link> project (generated with `ts#api`)
22
22
  2. A <Link path="guides/ts-dynamodb">`ts#dynamodb`</Link> project
23
23
 
24
24
  ## Usage
@@ -35,14 +35,14 @@ Select your tRPC API project as the source and your DynamoDB project as the targ
35
35
 
36
36
  ## Generator Output
37
37
 
38
- The generator updates your tRPC API's `project.json` to add a dependency from its `serve-local` target to the DynamoDB project's `serve-local` target. No source files are modified.
38
+ The generator updates your tRPC API's `project.json` to add a dependency from its `dev` target to the DynamoDB project's `dev` target. No source files are modified.
39
39
 
40
40
  ## Using DynamoDB in Procedures
41
41
 
42
42
  Import entity factories from the DynamoDB package and use them inside your tRPC procedures:
43
43
 
44
44
  ```ts title="packages/api/src/procedures/example.ts"
45
- import { createExampleEntity } from ':my-scope/my-table';
45
+ import { createExampleEntity } from '@my-scope/my-table';
46
46
  import { publicProcedure } from '../init.js';
47
47
 
48
48
  export const listExamples = publicProcedure
@@ -18,7 +18,7 @@ The `connection` generator wires a <Link path="guides/trpc">tRPC API</Link> to a
18
18
 
19
19
  Before using this generator, ensure you have:
20
20
 
21
- 1. A <Link path="guides/trpc">`ts#trpc-api`</Link> project
21
+ 1. A <Link path="guides/trpc">tRPC API</Link> project (generated with `ts#api`)
22
22
  2. A <Link path="guides/ts-rdb">`ts#rdb`</Link> project
23
23
 
24
24
  ## Usage
@@ -45,7 +45,7 @@ The generator creates a middleware file in your tRPC API project:
45
45
 
46
46
  </FileTree>
47
47
 
48
- Additionally, it updates your tRPC API's `serve-local` target to start the database automatically when running locally.
48
+ Additionally, it updates your tRPC API's `dev` target to start the database automatically when running locally.
49
49
 
50
50
  ## Using the Middleware
51
51
 
@@ -65,7 +65,7 @@ export const authenticatedProcedure = t.procedure
65
65
 
66
66
  The plugin merges `IMyDbContext` into your procedure context, making `myDb` available as an optional property:
67
67
 
68
- ```ts title="packages/api/src/procedures/users.ts" {8,12}
68
+ ```ts title="packages/api/src/procedures/users.ts" {7-8}
69
69
  import { z } from 'zod';
70
70
  import { authenticatedProcedure } from '../router.js';
71
71
 
@@ -116,12 +116,12 @@ export const dbProcedure = t.procedure
116
116
 
117
117
  ### SSL Requirements When Connecting Without RDS Proxy
118
118
 
119
- <Snippet name="connection/lambda-rdb-ssl-requirements" parentHeading="SSL Requirements When Connecting Without RDS Proxy" />
119
+ <Snippet name="connection/ts-lambda-rdb-ssl-requirements" parentHeading="SSL Requirements When Connecting Without RDS Proxy" />
120
120
 
121
121
  ## Local Development
122
122
 
123
- The generator configures your tRPC API's `serve-local` target to depend on the database's `serve-local` target, so running:
123
+ The generator configures your tRPC API's `dev` target to depend on the database's `dev` target, so running:
124
124
 
125
- <NxCommands commands={["serve-local <api-project-name>"]} />
125
+ <NxCommands commands={["dev <api-project-name>"]} />
126
126
 
127
127
  will automatically start the local database alongside your API.
@@ -23,7 +23,7 @@ The generator sets up all the necessary wiring so your agent can discover and in
23
23
  Before using this generator, ensure you have:
24
24
 
25
25
  1. A TypeScript project with a <Link path="guides/ts-agent">Strands Agent</Link> component (any protocol)
26
- 2. A project with an Agent component generated with `--protocol=A2A` and `--auth=IAM` (either <Link path="guides/ts-agent">`ts#agent`</Link> or <Link path="guides/py-agent">`py#agent`</Link>)
26
+ 2. A project with an Agent component generated with `--protocol=a2a` and `--auth=iam` (either <Link path="guides/ts-agent">`ts#agent`</Link> or <Link path="guides/py-agent">`py#agent`</Link>)
27
27
  3. Both components created with `infra: agentcore`
28
28
 
29
29
  ## Usage
@@ -47,9 +47,12 @@ The generator creates a shared `agent-connection` package and modifies your agen
47
47
  - packages/common/agent-connection
48
48
  - src
49
49
  - app
50
- - \<target-agent-name>-client.ts High-level client for the connected A2A agent
50
+ - \<target-agent-name>-client-strands.ts High-level Strands client for the connected A2A agent
51
51
  - core
52
- - agentcore-a2a-client.ts Low-level AgentCore A2A client with SigV4 authentication
52
+ - agentcore-endpoints.ts Framework-agnostic ARN/URL resolution
53
+ - agentcore-fetch.ts Framework-agnostic SigV4 / JWT / session-forwarding fetch
54
+ - agentcore-a2a-client-config.ts Framework-agnostic A2A client config (signed `clientFactory`)
55
+ - agentcore-a2a-client-strands.ts Strands A2A client wrapping the config
53
56
  - index.ts Exports all clients
54
57
  - project.json
55
58
  - tsconfig.json
@@ -58,20 +61,20 @@ The generator creates a shared `agent-connection` package and modifies your agen
58
61
 
59
62
  Additionally, it:
60
63
  - Transforms your agent's `agent.ts` to register the remote A2A agent as a Strands `tool`
61
- - Updates the agent's `serve-local` target to depend on the target agent's `serve-local` target
64
+ - Updates the agent's `dev` target to depend on the target agent's `dev` target
62
65
  - Installs required dependencies
63
66
 
64
67
  ## Using the Connected A2A Agent
65
68
 
66
69
  The generator transforms your agent's `agent.ts` to wrap the remote A2A agent as a tool:
67
70
 
68
- ```ts title="packages/example/src/my-agent/agent.ts" {2,5-11,14}
71
+ ```ts title="packages/example/src/my-agent/agent.ts" {2,5-12,15}
69
72
  import { Agent, tool } from '@strands-agents/sdk';
70
- import { RemoteAgentClient } from ':my-scope/agent-connection';
73
+ import { RemoteAgentClientStrands } from '@my-scope/agent-connection';
71
74
  import { z } from 'zod';
72
75
 
73
76
  export const getAgent = async (sessionId: string) => {
74
- const remoteAgent = await RemoteAgentClient.create(sessionId);
77
+ const remoteAgent = await RemoteAgentClientStrands.create(sessionId);
75
78
  const remoteAgentTool = tool({
76
79
  name: 'askRemoteAgent',
77
80
  description: 'Delegate a question to the remote RemoteAgent A2A agent and return its reply.',
@@ -87,7 +90,7 @@ export const getAgent = async (sessionId: string) => {
87
90
 
88
91
  The `sessionId` parameter is plumbed through from the caller, ensuring consistency for [Bedrock AgentCore Observability](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/observability.html).
89
92
 
90
- Under the hood, `RemoteAgentClient.create(sessionId)` returns a Strands `A2AAgent` configured with a SigV4-signing `clientFactory` when deployed to AWS, and a plain `http://localhost:<port>/` endpoint when `SERVE_LOCAL=true`.
93
+ Under the hood, `RemoteAgentClientStrands.create(sessionId)` returns a Strands `A2AAgent` configured with a SigV4-signing `clientFactory` when deployed to AWS, and a plain `http://localhost:<port>/` endpoint when `LOCAL_DEV=true`. The signing and endpoint resolution live in the framework-agnostic `agentcore-a2a-client-config.ts`; only the thin `agentcore-a2a-client-strands.ts` depends on Strands.
91
94
 
92
95
  ## Infrastructure
93
96
 
@@ -95,12 +98,12 @@ Under the hood, `RemoteAgentClient.create(sessionId)` returns a Strands `A2AAgen
95
98
 
96
99
  ## Local Development
97
100
 
98
- The generator configures the host agent's `serve-local` target to:
101
+ The generator configures the host agent's `dev` target to:
99
102
  1. Start the connected A2A agent(s) automatically
100
- 2. Set `SERVE_LOCAL=true` so the generated client connects directly to `http://localhost:<port>/` instead of AgentCore
103
+ 2. Set `LOCAL_DEV=true` so the generated client connects directly to `http://localhost:<port>/` instead of AgentCore
101
104
 
102
105
  Run the agent locally with:
103
106
 
104
- <NxCommands commands={["<agent-name>-serve-local <project-name>"]} />
107
+ <NxCommands commands={["<agent-name>-dev <project-name>"]} />
105
108
 
106
109
  This will start both the host agent and all connected A2A agents, with the host agent calling the remote agents over plain HTTP on their assigned local ports.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: TypeScript Agent to DynamoDB
3
- description: Connect a TypeScript Agent to a DynamoDB table
3
+ description: Connect a TypeScript Agent to a TypeScript DynamoDB project
4
4
  when:
5
5
  sourceType: ts#agent
6
6
  targetType: ts#dynamodb
@@ -12,7 +12,7 @@ import NxCommands from '@components/nx-commands.astro';
12
12
  import Infrastructure from '@components/infrastructure.astro';
13
13
  import Snippet from '@components/snippet.astro';
14
14
 
15
- The `connection` generator wires a <Link path="guides/ts-agent">TypeScript Agent</Link> to a <Link path="guides/ts-dynamodb">DynamoDB</Link> project, configuring local development so both start together automatically.
15
+ The `connection` generator wires a <Link path="guides/ts-agent">TypeScript Agent</Link> to a <Link path="guides/ts-dynamodb">TypeScript DynamoDB</Link> project, configuring local development so both start together automatically.
16
16
 
17
17
  ## Prerequisites
18
18
 
@@ -35,14 +35,14 @@ Select your Agent project as the source and your DynamoDB project as the target.
35
35
 
36
36
  ## Generator Output
37
37
 
38
- The generator updates the agent's `<agent-name>-serve-local` target in `project.json` to depend on the DynamoDB project's `serve-local` target. No source files are modified.
38
+ The generator updates the agent's `<agent-name>-dev` target in `project.json` to depend on the DynamoDB project's `dev` target. No source files are modified.
39
39
 
40
40
  ## Using DynamoDB in Agents
41
41
 
42
42
  Import entity factories from the DynamoDB package and use them inside your agent definition:
43
43
 
44
44
  ```ts title="packages/my-service/src/my-agent/agent.ts"
45
- import { createExampleEntity } from ':my-scope/my-table';
45
+ import { createExampleEntity } from '@my-scope/my-table';
46
46
 
47
47
  export const getAgent = async () => {
48
48
  // ...
@@ -70,7 +70,7 @@ To allow the agent's Lambda function to access the DynamoDB table, grant the nec
70
70
  <Fragment slot="cdk">
71
71
 
72
72
  ```ts title="packages/infra/src/stacks/application-stack.ts"
73
- import { MyTable } from ':my-scope/common-constructs';
73
+ import { MyTable } from '@my-scope/common-constructs';
74
74
 
75
75
  const table = new MyTable(this, 'Table');
76
76
  const myAgent = new MyAgent(this, 'MyAgent');
@@ -0,0 +1,143 @@
1
+ ---
2
+ title: TypeScript Agent to Gateway
3
+ description: Connect a TypeScript Agent to an AgentCore Gateway
4
+ when:
5
+ sourceType: ts#agent
6
+ targetType: agentcore-gateway
7
+ ---
8
+ import { FileTree } from '@astrojs/starlight/components';
9
+ import Link from '@components/link.astro';
10
+ import RunGenerator from '@components/run-generator.astro';
11
+ import GeneratorParameters from '@components/generator-parameters.astro';
12
+ import NxCommands from '@components/nx-commands.astro';
13
+ import Infrastructure from '@components/infrastructure.astro';
14
+
15
+ The `connection` generator can connect your <Link path="guides/ts-agent">TypeScript Agent</Link> to an <Link path="guides/agentcore-gateway">AgentCore Gateway</Link>.
16
+
17
+ The generator wires the agent so it authenticates to the Gateway with IAM SigV4 when deployed, and connects to the local gateway started by the Gateway project when running locally.
18
+
19
+ ## Prerequisites
20
+
21
+ Before using this generator, ensure you have:
22
+
23
+ 1. A TypeScript project with a <Link path="guides/ts-agent">Agent</Link> component (`infra: agentcore`)
24
+ 2. A <Link path="guides/agentcore-gateway">`agentcore-gateway`</Link> project with `auth: iam`
25
+
26
+ The Gateway must use IAM authentication — the agent signs its requests with SigV4 using its own execution role. The generator rejects Cognito-authenticated gateways.
27
+
28
+ ## Usage
29
+
30
+ ### Run the Generator
31
+
32
+ <RunGenerator generator="connection" />
33
+
34
+ Select the agent project as the source and the Gateway project as the target.
35
+
36
+ ### Options
37
+
38
+ <GeneratorParameters generator="connection" />
39
+
40
+ ## Generator Output
41
+
42
+ The generator emits shared core client files into your `agent-connection` package, plus a per-Gateway wrapper, and modifies your agent:
43
+
44
+ <FileTree>
45
+
46
+ - packages/common/agent-connection
47
+ - src
48
+ - core/
49
+ - agentcore-endpoints.ts Framework-agnostic ARN/URL resolution
50
+ - agentcore-gateway-mcp-transport.ts Framework-agnostic Gateway MCP transport
51
+ - agentcore-gateway-mcp-client-strands.ts Strands MCP client for the deployed Gateway
52
+ - app/
53
+ - \<gateway-kebab>-client-strands.ts Per-Gateway Strands client wrapper
54
+ - index.ts Re-exports the Gateway client
55
+
56
+ </FileTree>
57
+
58
+ Additionally, the generator:
59
+
60
+ - Modifies your agent's `agent.ts` to import the Gateway client class, call `<Gateway>ClientStrands.create()`, and register the returned client in the `tools` array
61
+ - Wires the agent's `<agent>-dev` target to depend on the Gateway's `dev` target
62
+ - Installs the required SigV4 / MCP dependencies
63
+
64
+ ## Using the connected Gateway
65
+
66
+ The generator transforms your agent's `agent.ts` to use the Gateway client:
67
+
68
+ ```ts title="packages/example/src/my-agent/agent.ts" {2,5,8}
69
+ import { Agent } from '@strands-agents/sdk';
70
+ import { MyGatewayClientStrands } from '@my-scope/agent-connection';
71
+
72
+ export const getAgent = async () => {
73
+ const myGateway = await MyGatewayClientStrands.create();
74
+ return new Agent({
75
+ systemPrompt: '...',
76
+ tools: [myGateway],
77
+ });
78
+ };
79
+ ```
80
+
81
+ When deployed (`LOCAL_DEV` unset), the client points at the Gateway's MCP endpoint and authenticates with SigV4. When `LOCAL_DEV=true`, it points at the local gateway started by the Gateway project's `dev` target, so the same `agent.ts` works uniformly in both modes.
82
+
83
+ The session ID is propagated to downstream MCP servers automatically via the `X-Amzn-Bedrock-AgentCore-Runtime-Session-Id` header.
84
+
85
+ ## Infrastructure
86
+
87
+ After running the generator you must grant the agent permission to invoke the Gateway.
88
+
89
+ <Infrastructure>
90
+ <Fragment slot="cdk">
91
+ ```ts title="packages/infra/src/stacks/application-stack.ts" {5}
92
+ const gateway = new MyGateway(this, 'MyGateway');
93
+ const myAgent = new MyAgent(this, 'MyAgent');
94
+
95
+ // Grant the agent permissions to invoke the Gateway
96
+ gateway.grantInvokeAccess(myAgent);
97
+ ```
98
+
99
+ The Gateway URL is automatically registered in the `agentcore.gateways.<ClassName>` namespace of <Link path="guides/runtime-config">Runtime Configuration</Link> by the generated CDK construct, so the agent can discover it at runtime.
100
+ </Fragment>
101
+ <Fragment slot="terraform">
102
+ ```hcl title="packages/infra/src/main.tf" {8-13}
103
+ module "my_gateway" {
104
+ source = "../../common/terraform/src/app/gateways/my-gateway"
105
+ }
106
+
107
+ module "my_agent" {
108
+ source = "../../common/terraform/src/app/agents/my-agent"
109
+
110
+ # Grant the agent permission to invoke the Gateway
111
+ additional_iam_policy_statements = [{
112
+ Effect = "Allow"
113
+ Action = ["bedrock-agentcore:InvokeGateway"]
114
+ Resource = [module.my_gateway.gateway_arn]
115
+ }]
116
+ }
117
+ ```
118
+
119
+ The Gateway URL is automatically registered in the `agentcore.gateways.<ClassName>` namespace of <Link path="guides/runtime-config">Runtime Configuration</Link> by the generated Terraform module, so the agent can discover it at runtime.
120
+ </Fragment>
121
+ </Infrastructure>
122
+
123
+ ## Local Development
124
+
125
+ The generator configures the agent's `dev` target to:
126
+
127
+ 1. Start the connected Gateway's local gateway and every attached MCP server
128
+ 2. Set `LOCAL_DEV=true` so the generated client points at the local gateway instead of the deployed Gateway
129
+
130
+ Run the agent locally with:
131
+
132
+ <NxCommands commands={["<agent-name>-dev <project-name>"]} />
133
+
134
+ To run the agent locally **against the deployed Gateway** instead (for example, to exercise Cedar policies), use the agent's `serve` target. Without `LOCAL_DEV` set, the client resolves the deployed Gateway URL from runtime configuration and SigV4-signs requests with your local AWS credentials:
135
+
136
+ <NxCommands commands={["<agent-name>-serve <project-name>"]} />
137
+
138
+ ### Local fidelity
139
+
140
+ The local gateway stands in for the deployed Gateway, so:
141
+
142
+ - **No Cedar policy evaluation.** Every tool is visible to the agent regardless of policies. Use the `serve` target to exercise policies against the deployed Gateway.
143
+ - **Tool-name prefixing is preserved.** Each local MCP server's tools are wrapped to expose names of the form `<target-name>___<tool-name>`, matching what the deployed Gateway emits. This keeps an agent's system prompt and the Cedar action names you reference consistent across local and deployed runs.
@@ -47,9 +47,12 @@ The generator creates a shared `agent-connection` package and modifies your agen
47
47
  - packages/common/agent-connection
48
48
  - src
49
49
  - app
50
- - \<mcp-server-name>-client.ts High-level client for the connected MCP server
50
+ - \<mcp-server-name>-client-strands.ts High-level Strands client for the connected MCP server
51
51
  - core
52
- - agentcore-mcp-client.ts Low-level AgentCore MCP client with SigV4/JWT authentication
52
+ - agentcore-endpoints.ts Framework-agnostic ARN/URL resolution
53
+ - agentcore-fetch.ts Framework-agnostic SigV4 / JWT / session-forwarding fetch
54
+ - agentcore-mcp-transport.ts Framework-agnostic MCP transport
55
+ - agentcore-mcp-client-strands.ts Strands MCP client wrapping the transport
53
56
  - index.ts Exports all clients
54
57
  - project.json
55
58
  - tsconfig.json
@@ -58,7 +61,7 @@ The generator creates a shared `agent-connection` package and modifies your agen
58
61
 
59
62
  Additionally, it:
60
63
  - Transforms your agent's `agent.ts` to import and use the MCP server's tools
61
- - Updates the agent's `serve-local` target to depend on the MCP server's serve target
64
+ - Updates the agent's `dev` target to depend on the MCP server's serve target
62
65
  - Installs required dependencies
63
66
 
64
67
  ## Using the Connected MCP Server
@@ -67,10 +70,10 @@ The generator transforms your agent's `agent.ts` to use the MCP server's tools:
67
70
 
68
71
  ```ts title="packages/example/src/my-agent/agent.ts" {2,5,8}
69
72
  import { Agent, tool } from '@strands-agents/sdk';
70
- import { MyMcpServerClient } from ':my-scope/agent-connection';
73
+ import { MyMcpServerClientStrands } from '@my-scope/agent-connection';
71
74
 
72
75
  export const getAgent = async (sessionId: string) => {
73
- const myMcpServerClient = await MyMcpServerClient.create(sessionId);
76
+ const myMcpServerClient = await MyMcpServerClientStrands.create(sessionId);
74
77
  return new Agent({
75
78
  systemPrompt: '...',
76
79
  tools: [myMcpServerClient],
@@ -99,7 +102,7 @@ The MCP server's AgentCore runtime ARN is automatically registered in the `agent
99
102
  <Fragment slot="terraform">
100
103
  After running the connection generator, you need to grant the agent permission to invoke the MCP server in your Terraform configuration:
101
104
 
102
- ```hcl title="packages/infra/src/main.tf" {12-24}
105
+ ```hcl title="packages/infra/src/main.tf" {9-25}
103
106
  module "inventory_mcp_server" {
104
107
  source = "../../common/terraform/src/app/mcp-servers/inventory-mcp"
105
108
  }
@@ -133,12 +136,12 @@ The MCP server's AgentCore runtime ARN is automatically registered in the `agent
133
136
 
134
137
  ## Local Development
135
138
 
136
- The generator configures the agent's `serve-local` target to:
139
+ The generator configures the agent's `dev` target to:
137
140
  1. Start the connected MCP server(s) automatically
138
- 2. Set `SERVE_LOCAL=true` so the generated client uses direct HTTP transport instead of AgentCore
141
+ 2. Set `LOCAL_DEV=true` so the generated client uses direct HTTP transport instead of AgentCore
139
142
 
140
143
  Run the agent locally with:
141
144
 
142
- <NxCommands commands={["<agent-name>-serve-local <project-name>"]} />
145
+ <NxCommands commands={["<agent-name>-dev <project-name>"]} />
143
146
 
144
147
  This will start both the agent and all connected MCP servers, with the agent connecting to the MCP servers directly via HTTP on their assigned local ports.
@@ -46,18 +46,14 @@ The generator modifies two files in your agent's source directory:
46
46
 
47
47
  </FileTree>
48
48
 
49
- Additionally, the agent's `<agent-name>-serve-local` target is updated to depend on the database's `serve-local` target.
49
+ Additionally, the agent's `<agent-name>-dev` target is updated to depend on the database's `dev` target.
50
50
 
51
- ## How It Works
51
+ ## Using the Database in Agent Tools
52
52
 
53
- The Prisma client is instantiated inside `getAgent()`. Since the `ts#agent` generator configures a single Agent per session, the client is also reused for the lifetime of the session.
54
-
55
- ### Agent Definition
56
-
57
- `getAgent` is updated to import and call the Prisma getter at the top of its body:
53
+ The Prisma client is instantiated inside `getAgent()`. Since the `ts#agent` generator configures a single Agent per session, the client is also reused for the lifetime of the session:
58
54
 
59
55
  ```ts title="packages/my-service/src/my-agent/agent.ts" {1,4}
60
- import { getPrisma as getMyDb } from ':my-scope/my-db';
56
+ import { getPrisma as getMyDb } from '@my-scope/my-db';
61
57
 
62
58
  export const getAgent = async () => {
63
59
  const myDb = await getMyDb();
@@ -66,14 +62,13 @@ export const getAgent = async () => {
66
62
  };
67
63
  ```
68
64
 
69
-
70
65
  ## Multiple Databases
71
66
 
72
67
  Running the generator again with a different target adds the second database alongside the first:
73
68
 
74
69
  ```ts title="packages/my-service/src/my-agent/agent.ts" {1,2,5,6}
75
- import { getPrisma as getMyDb } from ':my-scope/my-db';
76
- import { getPrisma as getOtherDb } from ':my-scope/other-db';
70
+ import { getPrisma as getMyDb } from '@my-scope/my-db';
71
+ import { getPrisma as getOtherDb } from '@my-scope/other-db';
77
72
 
78
73
  export const getAgent = async () => {
79
74
  const myDb = await getMyDb();
@@ -91,10 +86,21 @@ The generated agent construct implements `IGrantable` and `IConnectable`, so you
91
86
  <Fragment slot="cdk">
92
87
 
93
88
  ```ts title="packages/infra/src/stacks/application-stack.ts"
94
- import { MyDatabase } from ':my-scope/common-constructs';
89
+ import { SecurityGroup } from 'aws-cdk-lib/aws-ec2';
90
+ import { RuntimeNetworkConfiguration } from 'aws-cdk-lib/aws-bedrockagentcore';
91
+ import { MyDatabase } from '@my-scope/common-constructs';
95
92
 
96
93
  const db = new MyDatabase(this, 'Db', { vpc, ... });
97
- const myAgent = new MyAgent(this, 'MyAgent', { vpc, ... });
94
+
95
+ const myAgent = new MyAgent(this, 'MyAgent', {
96
+ networkConfiguration: RuntimeNetworkConfiguration.usingVpc(this, {
97
+ vpc,
98
+ vpcSubnets: { subnetType: SubnetType.PRIVATE_WITH_EGRESS },
99
+ securityGroups: [
100
+ new SecurityGroup(this, 'MyAgentSecurityGroup', { vpc, allowAllOutbound: true }),
101
+ ],
102
+ }),
103
+ });
98
104
 
99
105
  db.allowDefaultPortFrom(myAgent);
100
106
  db.grantConnect(myAgent);
@@ -102,30 +108,69 @@ db.grantConnect(myAgent);
102
108
 
103
109
  `allowDefaultPortFrom` opens the security group rule so the agent runtime can reach the database port. `grantConnect` grants IAM `rds-db:connect` permission to the agent's execution role.
104
110
 
111
+
105
112
  </Fragment>
106
113
  <Fragment slot="terraform">
107
114
 
108
- Pass the database module outputs into your agent module so it can reach the database and read its runtime configuration:
115
+ Run the agent inside the same VPC as the database, grant it `rds-db:connect` via `additional_iam_policy_statements`, and open the network path with a pair of security group rules. The `aws_vpc.main` and `aws_subnet` resources are defined in the database deployment guide:
109
116
 
110
117
  ```hcl title="packages/infra/src/main.tf"
111
118
  module "my_database" {
112
119
  source = "../../common/terraform/src/app/dbs/my-database"
113
- vpc_id = module.vpc.vpc_id
114
- database_subnet_ids = module.vpc.private_isolated_subnet_ids
120
+ vpc_id = aws_vpc.main.id
121
+ database_subnet_ids = aws_subnet.database[*].id
122
+ lambda_subnet_ids = aws_subnet.private[*].id
115
123
  }
116
124
 
117
125
  module "my_agent" {
118
- source = "../../common/terraform/src/app/agents/my-agent"
126
+ source = "../../common/terraform/src/app/agents/my-agent"
127
+ enable_vpc = true
128
+ vpc_id = aws_vpc.main.id
129
+ subnet_ids = aws_subnet.private[*].id
130
+
131
+ appconfig_application_id = module.runtime_config_appconfig.application_id
132
+ appconfig_application_arn = module.runtime_config_appconfig.application_arn
133
+
134
+ additional_iam_policy_statements = [
135
+ {
136
+ Effect = "Allow"
137
+ Action = ["rds-db:connect"]
138
+ Resource = [
139
+ "arn:aws:rds-db:${data.aws_region.current.region}:${data.aws_caller_identity.current.account_id}:dbuser:${module.my_database.connect_resource_id}/${module.my_database.database_runtime_user}"
140
+ ]
141
+ }
142
+ ]
143
+ }
119
144
 
120
- appconfig_application_id = module.my_database.appconfig_application_id
121
- database_cluster_resource_id = module.my_database.cluster_resource_id
122
- database_runtime_user = module.my_database.database_runtime_user
123
- database_security_group_id = module.my_database.security_group_id
124
- database_port = module.my_database.cluster_port
145
+ resource "aws_vpc_security_group_ingress_rule" "agent_to_database" {
146
+ description = "Allow the agent runtime to connect to the database"
147
+ security_group_id = module.my_database.security_group_id
148
+ referenced_security_group_id = module.my_agent.security_group_id
149
+ from_port = module.my_database.cluster_port
150
+ to_port = module.my_database.cluster_port
151
+ ip_protocol = "tcp"
152
+ }
153
+
154
+ resource "aws_vpc_security_group_egress_rule" "agent_to_database" {
155
+ description = "Allow outbound traffic from the agent runtime to the database"
156
+ security_group_id = module.my_agent.security_group_id
157
+ referenced_security_group_id = module.my_database.security_group_id
158
+ from_port = module.my_database.cluster_port
159
+ to_port = module.my_database.cluster_port
160
+ ip_protocol = "tcp"
125
161
  }
126
162
  ```
127
163
 
128
- Ensure the agent's execution role has `rds-db:connect` permission and that its security group can reach the database security group on the database port.
164
+ `appconfig_application_id`/`appconfig_application_arn` come from the shared <Link path="guides/runtime-config">runtime configuration</Link> AppConfig application declared once in your root module, not from the database module. Include the `database` namespace when instantiating it so the database module's runtime configuration entry is deployed:
165
+
166
+ ```hcl title="packages/infra/src/main.tf"
167
+ module "runtime_config_appconfig" {
168
+ source = "../../common/terraform/src/core/runtime-config/appconfig"
169
+
170
+ application_name = "my-app-runtime-config"
171
+ namespaces = ["connection", "agentcore", "database"]
172
+ }
173
+ ```
129
174
 
130
175
  </Fragment>
131
176
  </Infrastructure>
@@ -136,6 +181,6 @@ Ensure the agent's execution role has `rds-db:connect` permission and that its s
136
181
 
137
182
  ## Local Development
138
183
 
139
- <NxCommands commands={["<agent-name>-serve-local <project-name>"]} />
184
+ <NxCommands commands={["<agent-name>-dev <project-name>"]} />
140
185
 
141
- This starts the agent and all connected databases. The `SERVE_LOCAL=true` environment variable causes each Prisma client to connect to its local Docker database instead of Aurora.
186
+ This starts the agent and all connected databases. The `LOCAL_DEV=true` environment variable causes each Prisma client to connect to its local Docker database instead of Aurora.