@aws/nx-plugin-mcp 1.0.0-rc.0 → 1.0.0-rc.1
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/bin/aws-nx-mcp.js +12 -12
- package/docs/guides/connection/py-agent-a2a.mdx +1 -1
- package/docs/guides/connection/py-agent-mcp.mdx +1 -1
- package/docs/guides/connection/react-agui.mdx +1 -1
- package/docs/guides/connection/react-py-agent.mdx +1 -1
- package/docs/guides/connection/react-trpc.mdx +1 -1
- package/docs/guides/connection/react-ts-agent.mdx +1 -1
- package/docs/guides/connection/ts-agent-a2a.mdx +1 -1
- package/docs/guides/connection/ts-agent-mcp.mdx +1 -1
- package/docs/guides/fastapi.mdx +8 -8
- package/docs/guides/py-agent.mdx +18 -18
- package/docs/guides/py-mcp-server.mdx +5 -5
- package/docs/guides/python-lambda-function.mdx +4 -4
- package/docs/guides/react-website.mdx +2 -2
- package/docs/guides/trpc.mdx +15 -15
- package/docs/guides/ts-agent.mdx +18 -18
- package/docs/guides/ts-lambda-function.mdx +4 -4
- package/docs/guides/ts-mcp-server.mdx +5 -5
- package/docs/guides/ts-rdb.mdx +3 -3
- package/docs/guides/ts-smithy-api.mdx +5 -5
- package/docs/guides/workspace.mdx +2 -2
- package/docs/snippets/agent/architecture.mdx +4 -4
- package/docs/snippets/agent/bedrock-deployment.mdx +1 -1
- package/docs/snippets/api/api-architecture.mdx +2 -2
- package/docs/snippets/api/type-safe-api-integrations.mdx +2 -2
- package/docs/snippets/lambda-function/deploying-your-function.mdx +2 -2
- package/docs/snippets/mcp/architecture.mdx +4 -4
- package/docs/snippets/mcp/bedrock-deployment.mdx +1 -1
- package/package.json +1 -1
- package/src/infra/app/schema.json +1 -1
- package/src/preset/schema.json +4 -4
- package/src/py/agent/schema.json +18 -18
- package/src/py/api/schema.json +15 -15
- package/src/py/fast-api/schema.json +15 -15
- package/src/py/lambda-function/schema.json +7 -7
- package/src/py/mcp-server/schema.json +15 -15
- package/src/py/project/schema.json +2 -2
- package/src/smithy/ts/api/schema.json +15 -15
- package/src/trpc/backend/schema.json +15 -15
- package/src/ts/agent/schema.json +18 -18
- package/src/ts/api/schema.json +15 -15
- package/src/ts/lambda-function/schema.json +7 -7
- package/src/ts/mcp-server/schema.json +15 -15
- package/src/ts/rdb/schema.json +13 -13
- package/src/ts/react-website/app/schema.json +13 -13
- package/src/ts/react-website/cognito-auth/schema.json +4 -4
- package/src/ts/website/app/schema.json +13 -13
- package/src/ts/website/auth/schema.json +4 -4
package/docs/guides/ts-agent.mdx
CHANGED
|
@@ -47,7 +47,7 @@ First use the <Link path="/guides/typescript-project">`ts#project`</Link> genera
|
|
|
47
47
|
|
|
48
48
|
The generator will add the following files to your existing TypeScript project. The files generated depend on the chosen `protocol`:
|
|
49
49
|
|
|
50
|
-
<OptionFilter when={{ protocol: '
|
|
50
|
+
<OptionFilter when={{ protocol: 'http' }} description="tRPC-over-WebSocket layout">
|
|
51
51
|
### HTTP Protocol (default)
|
|
52
52
|
|
|
53
53
|
<FileTree>
|
|
@@ -60,13 +60,13 @@ The generator will add the following files to your existing TypeScript project.
|
|
|
60
60
|
- agent.ts Main agent definition with sample tools
|
|
61
61
|
- client.ts Vended client for invoking your agent
|
|
62
62
|
- agent-core-trpc-client.ts Client factory for connecting to agents on AgentCore Runtime
|
|
63
|
-
- Dockerfile Entry point for hosting your agent (excluded when `
|
|
63
|
+
- Dockerfile Entry point for hosting your agent (excluded when `infra` is set to `None`)
|
|
64
64
|
- package.json Updated with Strands dependencies
|
|
65
65
|
- project.json Updated with agent serve targets
|
|
66
66
|
</FileTree>
|
|
67
67
|
</OptionFilter>
|
|
68
68
|
|
|
69
|
-
<OptionFilter when={{ protocol: '
|
|
69
|
+
<OptionFilter when={{ protocol: 'a2a' }} description="Strands A2A Express server layout">
|
|
70
70
|
### A2A Protocol
|
|
71
71
|
|
|
72
72
|
The entry point uses the [Strands A2A Express Server](https://strandsagents.com/docs/user-guide/concepts/multi-agent/agent-to-agent) instead of tRPC:
|
|
@@ -77,13 +77,13 @@ The entry point uses the [Strands A2A Express Server](https://strandsagents.com/
|
|
|
77
77
|
- agent/ (or custom name if specified)
|
|
78
78
|
- index.ts A2A Express server entry point
|
|
79
79
|
- agent.ts Main agent definition with sample tools
|
|
80
|
-
- Dockerfile Entry point for hosting your agent (excluded when `
|
|
80
|
+
- Dockerfile Entry point for hosting your agent (excluded when `infra` is set to `None`)
|
|
81
81
|
- package.json Updated with Strands and Express dependencies
|
|
82
82
|
- project.json Updated with agent serve targets
|
|
83
83
|
</FileTree>
|
|
84
84
|
</OptionFilter>
|
|
85
85
|
|
|
86
|
-
<OptionFilter when={{ protocol: '
|
|
86
|
+
<OptionFilter when={{ protocol: 'ag-ui' }} description="AG-UI SSE-over-POST server layout">
|
|
87
87
|
### AG-UI Protocol
|
|
88
88
|
|
|
89
89
|
The entry point uses [`@ag-ui/aws-strands`](https://www.npmjs.com/package/@ag-ui/aws-strands) to expose the agent via the [AG-UI protocol](https://docs.ag-ui.com/) (SSE over POST), compatible with [CopilotKit](https://docs.copilotkit.ai/aws-strands):
|
|
@@ -94,7 +94,7 @@ The entry point uses [`@ag-ui/aws-strands`](https://www.npmjs.com/package/@ag-ui
|
|
|
94
94
|
- agent/ (or custom name if specified)
|
|
95
95
|
- index.ts AG-UI server entry point (Express + SSE)
|
|
96
96
|
- agent.ts Main agent definition with sample tools
|
|
97
|
-
- Dockerfile Entry point for hosting your agent (excluded when `
|
|
97
|
+
- Dockerfile Entry point for hosting your agent (excluded when `infra` is set to `None`)
|
|
98
98
|
- package.json Updated with Strands and AG-UI dependencies
|
|
99
99
|
- project.json Updated with agent serve targets
|
|
100
100
|
</FileTree>
|
|
@@ -102,7 +102,7 @@ The entry point uses [`@ag-ui/aws-strands`](https://www.npmjs.com/package/@ag-ui
|
|
|
102
102
|
|
|
103
103
|
### Infrastructure
|
|
104
104
|
|
|
105
|
-
<OptionFilter when={{
|
|
105
|
+
<OptionFilter when={{ infra: 'agentcore' }} description="Bedrock AgentCore Runtime deployment">
|
|
106
106
|
<Snippet name="shared-constructs" />
|
|
107
107
|
|
|
108
108
|
For deploying your Agent, the following files are generated:
|
|
@@ -132,8 +132,8 @@ For deploying your Agent, the following files are generated:
|
|
|
132
132
|
</Infrastructure>
|
|
133
133
|
</OptionFilter>
|
|
134
134
|
|
|
135
|
-
<OptionFilter when={{
|
|
136
|
-
If you selected `
|
|
135
|
+
<OptionFilter when={{ infra: 'none' }} description="No infrastructure is vended for infra=none">
|
|
136
|
+
If you selected `none` for `infra`, no CDK constructs or Terraform modules are generated — the Agent can only be run locally. The `auth` option is ignored in this mode since there is no hosted endpoint to authenticate.
|
|
137
137
|
</OptionFilter>
|
|
138
138
|
|
|
139
139
|
#### Architecture
|
|
@@ -152,7 +152,7 @@ Your agent's server protocol determines how it communicates. You can choose betw
|
|
|
152
152
|
|
|
153
153
|
The protocol is set in the CDK/Terraform infrastructure, and the application code is generated accordingly.
|
|
154
154
|
|
|
155
|
-
<OptionFilter when={{ protocol: '
|
|
155
|
+
<OptionFilter when={{ protocol: 'http' }} description="tRPC over WebSocket details">
|
|
156
156
|
### tRPC over WebSocket (HTTP protocol)
|
|
157
157
|
|
|
158
158
|
The TypeScript Agent uses [tRPC](https://trpc.io/) over WebSocket, leveraging [AgentCore's bidirectional streaming support](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-get-started-websocket.html) to enable real-time, type-safe communication between clients and your agent.
|
|
@@ -239,7 +239,7 @@ For other MCP servers, please refer to the [Strands Documentation](https://stran
|
|
|
239
239
|
|
|
240
240
|
For a more in-depth guide to writing Strands agents, refer to the [Strands documentation](https://strandsagents.com/docs/user-guide/quickstart/overview/).
|
|
241
241
|
|
|
242
|
-
<OptionFilter when={{ protocol: '
|
|
242
|
+
<OptionFilter when={{ protocol: 'a2a' }} description="A2A Express server details">
|
|
243
243
|
## A2A Server (A2A protocol)
|
|
244
244
|
|
|
245
245
|
The generated `index.ts` mounts the [Strands A2A Express Server](https://strandsagents.com/docs/user-guide/concepts/multi-agent/agent-to-agent) onto an Express app so the generated agent exposes the A2A protocol endpoints alongside a `/ping` health check. When deployed to AgentCore, the entry point resolves the runtime's public ARN from AppConfig and advertises it in the agent card.
|
|
@@ -247,7 +247,7 @@ The generated `index.ts` mounts the [Strands A2A Express Server](https://strands
|
|
|
247
247
|
Most users will not need to modify this file — edit `agent.ts` to change tools or the system prompt. A2A agents listen on port `9000` (vs `8080` for HTTP), which the generated Dockerfile and infrastructure are already configured for.
|
|
248
248
|
</OptionFilter>
|
|
249
249
|
|
|
250
|
-
<OptionFilter when={{ protocol: '
|
|
250
|
+
<OptionFilter when={{ protocol: 'ag-ui' }} description="AG-UI server details">
|
|
251
251
|
## AG-UI Server (AG-UI protocol)
|
|
252
252
|
|
|
253
253
|
The generated `index.ts` wraps your Strands `Agent` in an [`@ag-ui/aws-strands`](https://www.npmjs.com/package/@ag-ui/aws-strands) `StrandsAgent` and creates an Express app via `createStrandsApp()`. The resulting app exposes a single POST endpoint that streams [AG-UI](https://docs.ag-ui.com/) events over Server-Sent Events (SSE), as well as `/ping` for the AgentCore runtime health check.
|
|
@@ -275,7 +275,7 @@ The generator configures a `<your-agent-name>-chat` Nx target that depends on `<
|
|
|
275
275
|
|
|
276
276
|
For **HTTP** (tRPC over WebSocket) agents, the generator also emits a tiny `scripts/<your-agent-name>/chat.ts` that wraps the generated `<Agent>Client.local({ url })` so you can customize it as you evolve the agent's input shape.
|
|
277
277
|
|
|
278
|
-
<OptionFilter when={{
|
|
278
|
+
<OptionFilter when={{ infra: 'agentcore' }} description="Bedrock AgentCore Runtime deployment details">
|
|
279
279
|
## Deploying Your Agent to Bedrock AgentCore Runtime
|
|
280
280
|
|
|
281
281
|
<Snippet name="agent/bedrock-deployment" parentHeading="Deploying Your Agent to Bedrock AgentCore Runtime" />
|
|
@@ -305,7 +305,7 @@ For more details, refer to the [AgentCore documentation on observability](https:
|
|
|
305
305
|
|
|
306
306
|
Agent communication is transmitted via tRPC over WebSocket. As such, it's recommended to use the generated type-safe client factory in `client.ts`.
|
|
307
307
|
|
|
308
|
-
<OptionFilter when={{ protocol: '
|
|
308
|
+
<OptionFilter when={{ protocol: 'http' }} description="tRPC-over-WebSocket client factory invocation details">
|
|
309
309
|
### Invoke the Local Server
|
|
310
310
|
|
|
311
311
|
You can invoke a locally running agent using the `.local` factory method from the client factory.
|
|
@@ -340,7 +340,7 @@ The client factory uses HTTP headers in the WebSocket handshake to authenticate
|
|
|
340
340
|
:::
|
|
341
341
|
|
|
342
342
|
<Tabs syncKey="auth">
|
|
343
|
-
<TabItem label="IAM" _filter={{ auth: '
|
|
343
|
+
<TabItem label="IAM" _filter={{ auth: 'iam' }}>
|
|
344
344
|
##### IAM Authentication
|
|
345
345
|
|
|
346
346
|
You can invoke your deployed agent by passing its ARN to the `withIamAuth` factory method:
|
|
@@ -364,7 +364,7 @@ This will use the default AWS credential provider chain to authenticate requests
|
|
|
364
364
|
:::
|
|
365
365
|
</TabItem>
|
|
366
366
|
|
|
367
|
-
<TabItem label="Cognito" _filter={{ auth: '
|
|
367
|
+
<TabItem label="Cognito" _filter={{ auth: 'cognito' }}>
|
|
368
368
|
##### JWT / Cognito Authentication
|
|
369
369
|
|
|
370
370
|
Use the `withJwtAuth` factory method to authenticate with the JWT / Cognito access token.
|
|
@@ -415,7 +415,7 @@ For invoking your Agent from a React website, you can make use of the <Link path
|
|
|
415
415
|
Refer to the <Link path="/guides/connection/react-ts-agent">`connection` generator guide</Link> for details about how the connection is set up.
|
|
416
416
|
</OptionFilter>
|
|
417
417
|
|
|
418
|
-
<OptionFilter when={{ protocol: '
|
|
418
|
+
<OptionFilter when={{ protocol: 'a2a' }} description="A2A delegation details">
|
|
419
419
|
### Invoking an A2A Agent as a Tool
|
|
420
420
|
|
|
421
421
|
To delegate work from this agent to a remote A2A agent (either <Link path="/guides/ts-agent">TypeScript</Link> or <Link path="/guides/py-agent">Python</Link>), use the <Link path="/guides/connection/ts-agent-a2a">`connection` generator</Link>. It vends a SigV4-authenticated client for the target agent and AST-transforms this agent's `agent.ts` to register the remote A2A agent as a Strands `tool`.
|
|
@@ -425,7 +425,7 @@ To delegate work from this agent to a remote A2A agent (either <Link path="/guid
|
|
|
425
425
|
Refer to the <Link path="/guides/connection/ts-agent-a2a">`connection` generator guide</Link> for details about how the connection is set up.
|
|
426
426
|
</OptionFilter>
|
|
427
427
|
|
|
428
|
-
<OptionFilter when={{ protocol: '
|
|
428
|
+
<OptionFilter when={{ protocol: 'ag-ui' }} description="AG-UI / React connection details">
|
|
429
429
|
### Invoking an AG-UI Agent
|
|
430
430
|
|
|
431
431
|
To invoke your AG-UI agent from a React website, use the <Link path="/guides/connection/react-agui">`connection` generator</Link>, which wires up a [CopilotKit](https://docs.copilotkit.ai/aws-strands) client configured for your deployed agent with the correct authentication (IAM or Cognito).
|
|
@@ -179,8 +179,8 @@ export const handler = middy()
|
|
|
179
179
|
|
|
180
180
|
### Type Safety
|
|
181
181
|
|
|
182
|
-
<OptionFilter not when={{
|
|
183
|
-
If you chose an `
|
|
182
|
+
<OptionFilter not when={{ event: 'Any' }} description="event provides a typed Zod schema for the incoming event">
|
|
183
|
+
If you chose an `event` when generating your lambda function, your function is instrumented with the [`parser` middleware from AWS Lambda Powertools](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/parser/). For example:
|
|
184
184
|
|
|
185
185
|
```typescript {4}
|
|
186
186
|
export const myFunction = async (
|
|
@@ -205,8 +205,8 @@ If you have custom data nested within an event, for example a DynamoDB stream or
|
|
|
205
205
|
:::
|
|
206
206
|
</OptionFilter>
|
|
207
207
|
|
|
208
|
-
<OptionFilter when={{
|
|
209
|
-
If you selected `Any` for your `
|
|
208
|
+
<OptionFilter when={{ event: 'Any' }} description="event=Any — no parser middleware, event is typed as `any`">
|
|
209
|
+
If you selected `Any` for your `event`, the `parser` middleware is not wired in and the `event` parameter is typed as `any`. Regenerate the function with a specific `event` if you want compile-time type safety and runtime validation.
|
|
210
210
|
</OptionFilter>
|
|
211
211
|
|
|
212
212
|
## Bundling
|
|
@@ -53,21 +53,21 @@ The generator will add the following files to your existing TypeScript project:
|
|
|
53
53
|
- divide.ts Sample tool
|
|
54
54
|
- resources/
|
|
55
55
|
- sample-guidance.ts Sample resource
|
|
56
|
-
- Dockerfile Entry point for hosting your MCP server (excluded when `
|
|
56
|
+
- Dockerfile Entry point for hosting your MCP server (excluded when `infra` is set to `None`)
|
|
57
57
|
- package.json Updated with bin entry and MCP dependencies
|
|
58
58
|
- project.json Updated with MCP server serve target
|
|
59
59
|
</FileTree>
|
|
60
60
|
|
|
61
61
|
### Infrastructure
|
|
62
62
|
|
|
63
|
-
<OptionFilter when={{
|
|
63
|
+
<OptionFilter when={{ infra: 'agentcore' }} description="Bedrock AgentCore Runtime deployment">
|
|
64
64
|
<Snippet name="shared-constructs" />
|
|
65
65
|
|
|
66
66
|
<Snippet name="mcp/shared-constructs" />
|
|
67
67
|
</OptionFilter>
|
|
68
68
|
|
|
69
|
-
<OptionFilter when={{
|
|
70
|
-
If you selected `
|
|
69
|
+
<OptionFilter when={{ infra: 'none' }} description="No infrastructure is vended for infra=none">
|
|
70
|
+
If you selected `none` for `infra`, no CDK constructs or Terraform modules are generated — the MCP server is configured for local STDIO / HTTP use only. The `auth` option is ignored in this mode since there is no hosted endpoint to authenticate.
|
|
71
71
|
</OptionFilter>
|
|
72
72
|
|
|
73
73
|
#### Architecture
|
|
@@ -146,7 +146,7 @@ If you would like to run your MCP server locally using [Streamable HTTP transpor
|
|
|
146
146
|
|
|
147
147
|
This command uses `tsx --watch` to automatically restart the server when files change.
|
|
148
148
|
|
|
149
|
-
<OptionFilter when={{
|
|
149
|
+
<OptionFilter when={{ infra: 'agentcore' }} description="Bedrock AgentCore Runtime deployment details">
|
|
150
150
|
## Deploying Your MCP Server to Bedrock AgentCore Runtime
|
|
151
151
|
|
|
152
152
|
<Snippet name="mcp/bedrock-deployment" parentHeading="Deploying Your MCP Server to Bedrock AgentCore Runtime" />
|
package/docs/guides/ts-rdb.mdx
CHANGED
|
@@ -528,7 +528,7 @@ By default, the generated local Docker database image matches the default Aurora
|
|
|
528
528
|
|
|
529
529
|
The local database image is configured in the generated database project's `serve-local` target in `project.json`. Update the image argument passed to `scripts/docker-start.ts` when you change engine versions.
|
|
530
530
|
|
|
531
|
-
<OptionFilter when={{ engine: '
|
|
531
|
+
<OptionFilter when={{ engine: 'postgres' }}>
|
|
532
532
|
<Infrastructure>
|
|
533
533
|
<Fragment slot="cdk">
|
|
534
534
|
|
|
@@ -554,7 +554,7 @@ module "my_database" {
|
|
|
554
554
|
</Infrastructure>
|
|
555
555
|
</OptionFilter>
|
|
556
556
|
|
|
557
|
-
<OptionFilter when={{ engine: '
|
|
557
|
+
<OptionFilter when={{ engine: 'mysql' }}>
|
|
558
558
|
<Infrastructure>
|
|
559
559
|
<Fragment slot="cdk">
|
|
560
560
|
|
|
@@ -689,7 +689,7 @@ module "my_database" {
|
|
|
689
689
|
|
|
690
690
|
## Limitations
|
|
691
691
|
|
|
692
|
-
<OptionFilter when={{ engine: '
|
|
692
|
+
<OptionFilter when={{ engine: 'mysql' }}>
|
|
693
693
|
|
|
694
694
|
### MySQL: API Gateway Streaming Mode
|
|
695
695
|
|
|
@@ -462,7 +462,7 @@ This sets up:
|
|
|
462
462
|
|
|
463
463
|
<Snippet name="api/cors-configuration-cdk-note" />
|
|
464
464
|
|
|
465
|
-
<OptionFilter when={{ auth: '
|
|
465
|
+
<OptionFilter when={{ auth: 'cognito' }} description="Cognito identity construct wiring">
|
|
466
466
|
:::note[Cognito Authentication]
|
|
467
467
|
If you selected `Cognito` authentication, you will need to supply the `identity` property to the API construct:
|
|
468
468
|
|
|
@@ -485,7 +485,7 @@ The `UserIdentity` construct can be generated using the <Link path="/guides/reac
|
|
|
485
485
|
:::
|
|
486
486
|
</OptionFilter>
|
|
487
487
|
|
|
488
|
-
<OptionFilter when={{ auth: '
|
|
488
|
+
<OptionFilter when={{ auth: 'custom' }} description="Custom Lambda Authorizer CDK usage">
|
|
489
489
|
:::caution[Custom Lambda Authorizer]
|
|
490
490
|
When using `Custom` auth, the construct creates a Lambda Authorizer internally from the generated `src/authorizer.ts` file, which **denies all requests by default**. You must implement your authorization logic in that file before your API will accept any traffic.
|
|
491
491
|
:::
|
|
@@ -532,7 +532,7 @@ This sets up:
|
|
|
532
532
|
|
|
533
533
|
<Snippet name="api/cors-configuration-terraform-note" />
|
|
534
534
|
|
|
535
|
-
<OptionFilter when={{ auth: '
|
|
535
|
+
<OptionFilter when={{ auth: 'cognito' }} description="Cognito module wiring">
|
|
536
536
|
:::note[Cognito Authentication]
|
|
537
537
|
If you selected `Cognito` authentication, you will need to supply the Cognito configuration:
|
|
538
538
|
|
|
@@ -556,7 +556,7 @@ module "my_api" {
|
|
|
556
556
|
:::
|
|
557
557
|
</OptionFilter>
|
|
558
558
|
|
|
559
|
-
<OptionFilter when={{ auth: '
|
|
559
|
+
<OptionFilter when={{ auth: 'custom' }} description="Custom Lambda Authorizer usage with Terraform">
|
|
560
560
|
:::caution[Custom Lambda Authorizer]
|
|
561
561
|
When using `Custom` auth, your API is protected by a Lambda Authorizer that **denies all requests by default**. You must implement your authorization logic in the generated `src/authorizer.ts` file before your API will accept any traffic.
|
|
562
562
|
:::
|
|
@@ -618,7 +618,7 @@ We do not support type-safe integrations for Terraform, and therefore no code ge
|
|
|
618
618
|
</Fragment>
|
|
619
619
|
</Infrastructure>
|
|
620
620
|
|
|
621
|
-
<OptionFilter when={{ auth: '
|
|
621
|
+
<OptionFilter when={{ auth: 'iam' }} description="IAM-authenticated APIs only">
|
|
622
622
|
### Granting Access (IAM Only)
|
|
623
623
|
|
|
624
624
|
If you selected `IAM` authentication, you can use the `grantInvokeAccess` method to grant access to your API:
|
|
@@ -167,7 +167,7 @@ import { AwsNxPluginConfig } from '@aws/nx-plugin';
|
|
|
167
167
|
|
|
168
168
|
export default {
|
|
169
169
|
iac: {
|
|
170
|
-
provider: '
|
|
170
|
+
provider: 'cdk', // or 'terraform'
|
|
171
171
|
},
|
|
172
172
|
containers: {
|
|
173
173
|
engine: 'docker', // or 'finch'
|
|
@@ -175,7 +175,7 @@ export default {
|
|
|
175
175
|
} satisfies AwsNxPluginConfig;
|
|
176
176
|
```
|
|
177
177
|
|
|
178
|
-
- **`iac.provider`** — the default infrastructure-as-code provider (`
|
|
178
|
+
- **`iac.provider`** — the default infrastructure-as-code provider (`cdk` or `terraform`) used by generators that emit infrastructure (e.g. `ts#infra`, `ts#trpc-api`, `py#fast-api`). Generators that accept an `--iac` flag default to `inherit`, which reads this value.
|
|
179
179
|
- **`containers.engine`** — the container CLI (`docker` or `finch`) baked into generated build/push/login commands. CDK image-asset builds also pick this up via the `CDK_DOCKER` environment variable. See the <Link path="guides/docker-bundling">Docker bundling guide</Link> for details.
|
|
180
180
|
|
|
181
181
|
You can edit either setting at any time — subsequent generator runs will pick up the new value.
|
|
@@ -3,8 +3,8 @@ title: Agent Architecture
|
|
|
3
3
|
---
|
|
4
4
|
import { Tabs, TabItem } from '@astrojs/starlight/components';
|
|
5
5
|
|
|
6
|
-
<Tabs syncKey="
|
|
7
|
-
<TabItem label="Bedrock AgentCore Runtime" _filter={{
|
|
6
|
+
<Tabs syncKey="infra">
|
|
7
|
+
<TabItem label="Bedrock AgentCore Runtime" _filter={{ infra: 'agentcore' }}>
|
|
8
8
|
|
|
9
9
|
When deployed to [Bedrock AgentCore Runtime](https://aws.amazon.com/bedrock/agentcore/), the agent is built into a container image, pushed to Amazon ECR and run in AgentCore Runtime. Clients invoke the AgentCore Runtime data plane endpoint, which forwards requests to your agent. The agent calls Amazon Bedrock for model inference and may invoke tools, MCP servers, or downstream APIs.
|
|
10
10
|
|
|
@@ -44,9 +44,9 @@ agentcore -> bedrock: InvokeModel
|
|
|
44
44
|
agentcore -> cw
|
|
45
45
|
```
|
|
46
46
|
</TabItem>
|
|
47
|
-
<TabItem label="None (local only)" _filter={{
|
|
47
|
+
<TabItem label="None (local only)" _filter={{ infra: 'none' }}>
|
|
48
48
|
|
|
49
|
-
With `
|
|
49
|
+
With `infra: none`, no AWS infrastructure is generated. The agent runs as a local process and calls Amazon Bedrock for model inference.
|
|
50
50
|
|
|
51
51
|
```d2 inline=true
|
|
52
52
|
direction: right
|
|
@@ -6,7 +6,7 @@ import Infrastructure from '@components/infrastructure.astro';
|
|
|
6
6
|
|
|
7
7
|
### Infrastructure as Code
|
|
8
8
|
|
|
9
|
-
If you selected `
|
|
9
|
+
If you selected `agentcore` for `infra`, the relevant CDK or Terraform infrastructure is generated which you can use to deploy your Agent to [Amazon Bedrock AgentCore Runtime](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agents-tools-runtime.html).
|
|
10
10
|
|
|
11
11
|
<Infrastructure>
|
|
12
12
|
<Fragment slot="cdk">
|
|
@@ -6,7 +6,7 @@ import { Tabs, TabItem } from '@astrojs/starlight/components';
|
|
|
6
6
|
The deployed application has the following architecture:
|
|
7
7
|
|
|
8
8
|
<Tabs syncKey="http-rest">
|
|
9
|
-
<TabItem label="REST API" _filter={{
|
|
9
|
+
<TabItem label="REST API" _filter={{ infra: 'rest-lambda' }}>
|
|
10
10
|
```d2 inline=true
|
|
11
11
|
direction: right
|
|
12
12
|
|
|
@@ -51,7 +51,7 @@ lambda -> xray
|
|
|
51
51
|
|
|
52
52
|
REST APIs include an [AWS WAFv2](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) Web ACL in front of the API Gateway stage with the AWS managed default ruleset enabled.
|
|
53
53
|
</TabItem>
|
|
54
|
-
<TabItem label="HTTP API" _filter={{
|
|
54
|
+
<TabItem label="HTTP API" _filter={{ infra: 'http-lambda' }}>
|
|
55
55
|
```d2 inline=true
|
|
56
56
|
direction: right
|
|
57
57
|
|
|
@@ -306,7 +306,7 @@ Edit `packages/common/terraform/src/app/apis/my-api/my-api.tf`:
|
|
|
306
306
|
3. **Create specific integrations and routes** for each operation, reusing the same ZIP bundle:
|
|
307
307
|
|
|
308
308
|
<Tabs syncKey="http-rest">
|
|
309
|
-
<TabItem label="HTTP API" _filter={{
|
|
309
|
+
<TabItem label="HTTP API" _filter={{ infra: 'http-lambda' }}>
|
|
310
310
|
|
|
311
311
|
```diff
|
|
312
312
|
# packages/common/terraform/src/app/apis/my-api/my-api.tf
|
|
@@ -429,7 +429,7 @@ Edit `packages/common/terraform/src/app/apis/my-api/my-api.tf`:
|
|
|
429
429
|
+ }
|
|
430
430
|
```
|
|
431
431
|
</TabItem>
|
|
432
|
-
<TabItem label="REST API" _filter={{
|
|
432
|
+
<TabItem label="REST API" _filter={{ infra: 'rest-lambda' }}>
|
|
433
433
|
|
|
434
434
|
```diff
|
|
435
435
|
# packages/common/terraform/src/app/apis/my-api/my-api.tf
|
|
@@ -30,7 +30,7 @@ This sets up:
|
|
|
30
30
|
This function can then be used as a target for any lambda [event source](https://docs.powertools.aws.dev/lambda/typescript/latest/utilities/parser/):
|
|
31
31
|
|
|
32
32
|
:::note[Event Source Matching]
|
|
33
|
-
Ensure the event source matches the selected `
|
|
33
|
+
Ensure the event source matches the selected `event` option to ensure the event is properly handled within your handler function.
|
|
34
34
|
:::
|
|
35
35
|
|
|
36
36
|
The example below demonstrates the CDK code for invoking your lambda function on a schedule using EventBridge:
|
|
@@ -112,7 +112,7 @@ resource "aws_lambda_permission" "allow_eventbridge" {
|
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
:::note[Event Source Matching]
|
|
115
|
-
Ensure the event source matches the selected `
|
|
115
|
+
Ensure the event source matches the selected `event` option to ensure the event is properly handled within your handler function.
|
|
116
116
|
:::
|
|
117
117
|
</Fragment>
|
|
118
118
|
</Infrastructure>
|
|
@@ -3,8 +3,8 @@ title: MCP Server Architecture
|
|
|
3
3
|
---
|
|
4
4
|
import { Tabs, TabItem } from '@astrojs/starlight/components';
|
|
5
5
|
|
|
6
|
-
<Tabs syncKey="
|
|
7
|
-
<TabItem label="Bedrock AgentCore Runtime" _filter={{
|
|
6
|
+
<Tabs syncKey="infra">
|
|
7
|
+
<TabItem label="Bedrock AgentCore Runtime" _filter={{ infra: 'agentcore' }}>
|
|
8
8
|
|
|
9
9
|
When deployed to [Bedrock AgentCore Runtime](https://aws.amazon.com/bedrock/agentcore/), the MCP server is built into a container image, pushed to Amazon ECR, and run in AgentCore Runtime. AI assistants invoke the AgentCore Runtime data plane endpoint, which forwards `tools/*` and `resources/*` calls to your server over the [streamable HTTP transport](https://modelcontextprotocol.io/specification/draft/basic/transports#streamable-http).
|
|
10
10
|
|
|
@@ -36,9 +36,9 @@ ecr -> agentcore: Container\nimage
|
|
|
36
36
|
agentcore -> cw
|
|
37
37
|
```
|
|
38
38
|
</TabItem>
|
|
39
|
-
<TabItem label="None (local only)" _filter={{
|
|
39
|
+
<TabItem label="None (local only)" _filter={{ infra: 'none' }}>
|
|
40
40
|
|
|
41
|
-
With `
|
|
41
|
+
With `infra: none`, no AWS infrastructure is generated. The MCP server is configured for local STDIO and HTTP transports only, and is consumed by AI assistants running on the same machine.
|
|
42
42
|
|
|
43
43
|
```d2 inline=true
|
|
44
44
|
direction: right
|
|
@@ -6,7 +6,7 @@ import Infrastructure from '@components/infrastructure.astro';
|
|
|
6
6
|
|
|
7
7
|
### Infrastructure as Code
|
|
8
8
|
|
|
9
|
-
If you selected `
|
|
9
|
+
If you selected `agentcore` for `infra`, the relevant CDK or Terraform infrastructure is generated which you can use to deploy your MCP server to [Amazon Bedrock AgentCore Runtime](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agents-tools-runtime.html).
|
|
10
10
|
|
|
11
11
|
<Infrastructure>
|
|
12
12
|
<Fragment slot="cdk">
|
package/package.json
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"description": "The sub directory the project is placed in. By default this is the project name.",
|
|
28
28
|
"x-prompt": "Which sub directory do you want to create the project in? (By default this is the project name)"
|
|
29
29
|
},
|
|
30
|
-
"
|
|
30
|
+
"stageConfig": {
|
|
31
31
|
"description": "Enable centralized stage configuration (credentials, account, region) for multi-environment CDK deployments.",
|
|
32
32
|
"type": "boolean",
|
|
33
33
|
"default": false,
|
package/src/preset/schema.json
CHANGED
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
"description": "Whether to add the ts plugin.",
|
|
11
11
|
"default": true
|
|
12
12
|
},
|
|
13
|
-
"
|
|
13
|
+
"iac": {
|
|
14
14
|
"type": "string",
|
|
15
15
|
"description": "The preferred IaC provider.",
|
|
16
|
-
"enum": ["
|
|
17
|
-
"default": "
|
|
16
|
+
"enum": ["cdk", "terraform"],
|
|
17
|
+
"default": "cdk",
|
|
18
18
|
"x-priority": "important",
|
|
19
19
|
"x-prompt": "Which provider would you like to manage your infrastructure?"
|
|
20
20
|
},
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"description": "Whether to configure git-secrets to prevent committing AWS credentials.",
|
|
24
24
|
"default": true
|
|
25
25
|
},
|
|
26
|
-
"
|
|
26
|
+
"containers": {
|
|
27
27
|
"type": "string",
|
|
28
28
|
"description": "The container engine to use for build/push/login. 'infer' picks docker if installed, otherwise finch (falling back to docker when neither is installed).",
|
|
29
29
|
"enum": ["infer", "docker", "finch"],
|
package/src/py/agent/schema.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"x-prompt": "Select the Python project to add the Agent to",
|
|
16
16
|
"x-dropdown": "projects"
|
|
17
17
|
},
|
|
18
|
-
"
|
|
18
|
+
"framework": {
|
|
19
19
|
"type": "string",
|
|
20
20
|
"description": "The agent SDK to use.",
|
|
21
21
|
"x-prompt": "Which agent SDK would you like to use?",
|
|
@@ -23,14 +23,6 @@
|
|
|
23
23
|
"default": "strands",
|
|
24
24
|
"x-priority": "important"
|
|
25
25
|
},
|
|
26
|
-
"computeType": {
|
|
27
|
-
"type": "string",
|
|
28
|
-
"description": "The type of compute to host your Agent.",
|
|
29
|
-
"x-prompt": "How would you like to host your Agent server?",
|
|
30
|
-
"enum": ["BedrockAgentCoreRuntime", "None"],
|
|
31
|
-
"default": "BedrockAgentCoreRuntime",
|
|
32
|
-
"x-priority": "important"
|
|
33
|
-
},
|
|
34
26
|
"name": {
|
|
35
27
|
"type": "string",
|
|
36
28
|
"description": "The name of your Agent (default: agent)",
|
|
@@ -38,9 +30,9 @@
|
|
|
38
30
|
},
|
|
39
31
|
"auth": {
|
|
40
32
|
"type": "string",
|
|
41
|
-
"description": "The method used to authenticate with your Agent. Only applicable when
|
|
42
|
-
"default": "
|
|
43
|
-
"enum": ["
|
|
33
|
+
"description": "The method used to authenticate with your Agent. Only applicable when infra is set (ignored when infra is none).",
|
|
34
|
+
"default": "iam",
|
|
35
|
+
"enum": ["iam", "cognito"],
|
|
44
36
|
"x-prompt": "How would you like to authenticate with your Agent?",
|
|
45
37
|
"x-priority": "important"
|
|
46
38
|
},
|
|
@@ -48,17 +40,25 @@
|
|
|
48
40
|
"type": "string",
|
|
49
41
|
"description": "The server protocol for your Agent. HTTP exposes a FastAPI HTTP server. A2A exposes an Agent-to-Agent protocol server. AG-UI exposes an Agent-User Interaction protocol server for direct frontend integration.",
|
|
50
42
|
"x-prompt": "Which protocol would you like to use for your Agent?",
|
|
51
|
-
"enum": ["
|
|
52
|
-
"default": "
|
|
43
|
+
"enum": ["http", "a2a", "ag-ui"],
|
|
44
|
+
"default": "http",
|
|
53
45
|
"x-priority": "important"
|
|
54
46
|
},
|
|
55
|
-
"
|
|
47
|
+
"iac": {
|
|
56
48
|
"type": "string",
|
|
57
49
|
"description": "The preferred IaC provider. By default this is inherited from your initial selection.",
|
|
58
|
-
"enum": ["
|
|
50
|
+
"enum": ["inherit", "cdk", "terraform"],
|
|
59
51
|
"x-priority": "important",
|
|
60
|
-
"default": "
|
|
61
|
-
"x-prompt": "Which provider would you like to manage your infrastructure? (default:
|
|
52
|
+
"default": "inherit",
|
|
53
|
+
"x-prompt": "Which provider would you like to manage your infrastructure? (default: inherit)"
|
|
54
|
+
},
|
|
55
|
+
"infra": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"description": "The type of infrastructure to host your Agent.",
|
|
58
|
+
"x-prompt": "How would you like to host your Agent server?",
|
|
59
|
+
"enum": ["agentcore", "none"],
|
|
60
|
+
"default": "agentcore",
|
|
61
|
+
"x-priority": "important"
|
|
62
62
|
}
|
|
63
63
|
},
|
|
64
64
|
"required": ["project"]
|
package/src/py/api/schema.json
CHANGED
|
@@ -33,14 +33,6 @@
|
|
|
33
33
|
},
|
|
34
34
|
"x-priority": "important"
|
|
35
35
|
},
|
|
36
|
-
"computeType": {
|
|
37
|
-
"type": "string",
|
|
38
|
-
"description": "The type of compute to use to deploy this API. Choose between ServerlessApiGatewayRestApi (default) or ServerlessApiGatewayHttpApi.",
|
|
39
|
-
"default": "ServerlessApiGatewayRestApi",
|
|
40
|
-
"enum": ["ServerlessApiGatewayRestApi", "ServerlessApiGatewayHttpApi"],
|
|
41
|
-
"x-prompt": "What compute type would you like to deploy your API with?",
|
|
42
|
-
"x-priority": "important"
|
|
43
|
-
},
|
|
44
36
|
"integrationPattern": {
|
|
45
37
|
"type": "string",
|
|
46
38
|
"description": "How API Gateway integrations are generated for the API. Choose between isolated (default) and shared.",
|
|
@@ -65,9 +57,9 @@
|
|
|
65
57
|
},
|
|
66
58
|
"auth": {
|
|
67
59
|
"type": "string",
|
|
68
|
-
"description": "The method used to authenticate with your API. Choose between
|
|
69
|
-
"default": "
|
|
70
|
-
"enum": ["
|
|
60
|
+
"description": "The method used to authenticate with your API. Choose between iam (default), cognito or custom.",
|
|
61
|
+
"default": "iam",
|
|
62
|
+
"enum": ["iam", "cognito", "custom"],
|
|
71
63
|
"x-prompt": "How would you like users to authenticate with your API?",
|
|
72
64
|
"x-priority": "important"
|
|
73
65
|
},
|
|
@@ -83,17 +75,25 @@
|
|
|
83
75
|
"description": "The sub directory the project is placed in. By default this is the project name.",
|
|
84
76
|
"x-prompt": "Which sub directory do you want to create the project in? (By default this is the project name)"
|
|
85
77
|
},
|
|
86
|
-
"
|
|
78
|
+
"iac": {
|
|
87
79
|
"type": "string",
|
|
88
80
|
"description": "The preferred IaC provider. By default this is inherited from your initial selection.",
|
|
89
|
-
"enum": ["
|
|
81
|
+
"enum": ["inherit", "cdk", "terraform"],
|
|
90
82
|
"x-priority": "important",
|
|
91
|
-
"default": "
|
|
92
|
-
"x-prompt": "Which provider would you like to manage your infrastructure? (default:
|
|
83
|
+
"default": "inherit",
|
|
84
|
+
"x-prompt": "Which provider would you like to manage your infrastructure? (default: inherit)"
|
|
93
85
|
},
|
|
94
86
|
"moduleName": {
|
|
95
87
|
"type": "string",
|
|
96
88
|
"description": "Python module name"
|
|
89
|
+
},
|
|
90
|
+
"infra": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"description": "The type of infrastructure to use to deploy this API. Choose between rest-lambda (default) or http-lambda.",
|
|
93
|
+
"default": "rest-lambda",
|
|
94
|
+
"enum": ["rest-lambda", "http-lambda"],
|
|
95
|
+
"x-prompt": "What infrastructure would you like to deploy your API with?",
|
|
96
|
+
"x-priority": "important"
|
|
97
97
|
}
|
|
98
98
|
},
|
|
99
99
|
"required": ["name"]
|