Skip to content

Commit 2d94b37

Browse files
waleedlatif1claude
andauthored
feat(integrations): AWS SES, IAM Identity Center, and enhanced IAM/STS/CloudWatch/DynamoDB (#4245)
* feat(integrations): add AWS SES, IAM Identity Center, and enhanced IAM/STS/CloudWatch/DynamoDB integrations - Add AWS SES v2 integration with 9 operations (send email, templated, bulk, templates, account) - Add AWS IAM Identity Center integration with 12 operations (account assignments, permission sets, users, groups) - Add 3 new IAM tools: list-attached-role-policies, list-attached-user-policies, simulate-principal-policy - Fix DynamoDB duplicate subBlock IDs, add operation-scoped field names, add subblock migrations - Add authMode: AuthMode.ApiKey to DynamoDB block - Fix CloudWatch routes: toError, client.destroy(), withRouteHandler, auth outside try - Fix STS/DynamoDB/IAM routes: nullable Zod schemas, withRouteHandler adoption - Fix Identity Center: list_instances pagination, list_groups instanceArn condition - Add subblock migrations for renamed DynamoDB fields (key, filterExpression, etc.) - Apply withRouteHandler to all new and existing AWS tool routes * docs(ses): add manual intro section to SES docs * fix(dynamodb): add legacy fallbacks in params for subblock migration compatibility Workflows saved with the old shared IDs (key, filterExpression, etc.) that migrate to get-scoped slots via subblock-migrations still work correctly on update/delete/scan/put operations via fallback lookups in tools.config.params. * feat(contact): add contact page, migrate help/demo forms to useMutation (#4242) * feat(contact): add contact page, migrate help/demo forms to useMutation * improvement(contact): address greptile review feedback - Map contact topic to help email type for accurate confirmation emails - Drop Zod schema details from 400 response on public /api/contact - Wire aria-describedby + aria-invalid in LandingField for both forms - Reset helpMutation on modal reopen to match demo-request pattern * improvement(landing): extract shared LandingField component * fix(landing): resolve error-page crash on invalid /models and /integrations routes (#4243) * fix(layout): use plain inline script for PublicEnvScript to set env before chunks eval on error pages * fix(landing): handle runtime env race on error-page renders React skips SSR on unhandled server errors and re-renders on the client (see vercel/next.js#63980, #82456). Root-layout scripts — including the runtime env script that populates window.__ENV — are inserted but not executed on that client re-render, so any client module that reads env at module evaluation crashes the render into a blank "Application error" overlay instead of rendering the styled 404. This replaces the earlier PublicEnvScript tweak with the architectural fix: - auth-client.ts: fall back to window.location.origin when getBaseUrl() throws on the client. Auth endpoints are same-origin, so this is the correct baseURL on the client. Server-side we still throw on genuine misconfig. - loading.tsx under /models/[provider], /models/[provider]/[model], and /integrations/[slug]: establishes a Suspense boundary below the root layout so a page-level notFound() no longer invalidates the layout's SSR output (the fix endorsed by Next.js maintainers in #63980). - layout.tsx: revert disableNextScript — the research showed this doesn't actually fix error-page renders. The real fix is above. * improvement(landing): use emcn Loader in scoped loading.tsx, trim auth-client comment Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> * fix(iam): correct MissingContextValues mapping in simulatePrincipalPolicy * fix(aws): add conditionExpression migration fallback for DynamoDB delete, fix SES pageSize min * fix(aws): deep validation fixes across SES, IAM, Identity Center, DynamoDB integrations - IAM: replace non-existent StatementId with SourcePolicyType in simulatePrincipalPolicy - IAM: add .int() constraint to list-users/roles/policies/groups Zod schemas - IAM: remove redundant manual requestId from all 21 IAM route handlers - SES: add .refine() body validation to create-template route - SES: make bulk email destination templateData optional, only include ReplacementEmailContent when present - SES: fix pageSize guard to if (pageSize != null) to correctly forward 0 - SES: add max(100) to list-templates pageSize, revert list-identities to min(0) per SDK - STS: fix logger.error calls to use structured metadata pattern - Identity Center: remove deprecated account.Status fallback, use account.State only - DynamoDB: convert empty interface extends to type aliases, remove redundant error field, fix barrel to absolute imports * regen docs * fix(iam): add .int() constraint to maxSessionDuration in create-role route * fix(ses): forward pageSize=0 correctly in listIdentities util * fix(aws): add gradient background to IdentityCenterIcon, fix listTemplates pageSize guard --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
1 parent aee6189 commit 2d94b37

146 files changed

Lines changed: 9145 additions & 752 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/docs/components/icons.tsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4681,6 +4681,17 @@ export function IAMIcon(props: SVGProps<SVGSVGElement>) {
46814681
)
46824682
}
46834683

4684+
export function IdentityCenterIcon(props: SVGProps<SVGSVGElement>) {
4685+
return (
4686+
<svg {...props} viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'>
4687+
<path
4688+
d='M13.694,14.8194562 C14.376,14.1374562 14.376,13.0294562 13.694,12.3474562 C13.353,12.0074562 12.906,11.8374562 12.459,11.8374562 C12.01,11.8374562 11.563,12.0074562 11.222,12.3474562 C10.542,13.0284562 10.542,14.1384562 11.222,14.8194562 C11.905,15.5014562 13.013,15.4994562 13.694,14.8194562 M14.718,15.1374562 L18.703,19.1204562 L17.996,19.8274562 L16.868,18.6994562 L15.793,19.7754562 L15.086,19.0684562 L16.161,17.9924562 L14.011,15.8444562 C13.545,16.1654562 13.003,16.3294562 12.458,16.3294562 C11.755,16.3294562 11.051,16.0624562 10.515,15.5264562 C9.445,14.4554562 9.445,12.7124562 10.515,11.6404562 C11.586,10.5714562 13.329,10.5694562 14.401,11.6404562 C15.351,12.5904562 15.455,14.0674562 14.718,15.1374562 M20,12.1014562 C20,14.1684562 18.505,15.0934562 17.023,15.0934562 L17.023,14.0934562 C17.487,14.0934562 19,13.9494562 19,12.1014562 C19,11.0044562 18.353,10.3894562 16.905,10.1084562 C16.68,10.0654562 16.514,9.87545615 16.501,9.64845615 C16.446,8.74445615 15.987,8.11245615 15.384,8.11245615 C15.084,8.11245615 14.854,8.24245615 14.616,8.54645615 C14.506,8.68845615 14.324,8.75945615 14.147,8.73245615 C13.968,8.70545615 13.818,8.58445615 13.755,8.41445615 C13.577,7.94345615 13.211,7.43345615 12.723,6.97745615 C12.231,6.50945615 10.883,5.50745615 8.972,6.27345615 C7.885,6.70545615 7.034,7.94945615 7.034,9.10745615 C7.034,9.23545615 7.043,9.36245615 7.058,9.48845615 C7.061,9.50945615 7.062,9.53045615 7.062,9.55145615 C7.062,9.79945615 6.882,10.0064562 6.645,10.0464562 C5.886,10.2394562 5,10.7454562 5,12.0554562 L5.005,12.2104562 C5.069,13.3254562 6.252,13.9954562 7.358,13.9984562 L8,13.9984562 L8,14.9984562 L7.357,14.9984562 C5.536,14.9944562 4.095,13.8194562 4.006,12.2644562 C4.003,12.1944562 4,12.1244562 4,12.0554562 C4,10.6944562 4.752,9.64845615 6.035,9.18845615 C6.034,9.16145615 6.034,9.13445615 6.034,9.10745615 C6.034,7.54345615 7.138,5.92545615 8.602,5.34345615 C10.298,4.66545615 12.095,5.00345615 13.409,6.24945615 C13.706,6.52745615 14.076,6.92645615 14.372,7.41345615 C14.673,7.21245615 15.008,7.11245615 15.384,7.11245615 C16.257,7.11245615 17.231,7.77145615 17.458,9.20745615 C19.145,9.63245615 20,10.6054562 20,12.1014562'
4689+
fill='#FFFFFF'
4690+
/>
4691+
</svg>
4692+
)
4693+
}
4694+
46844695
export function STSIcon(props: SVGProps<SVGSVGElement>) {
46854696
return (
46864697
<svg {...props} viewBox='0 0 80 80' xmlns='http://www.w3.org/2000/svg'>
@@ -4699,6 +4710,24 @@ export function STSIcon(props: SVGProps<SVGSVGElement>) {
46994710
)
47004711
}
47014712

4713+
export function SESIcon(props: SVGProps<SVGSVGElement>) {
4714+
return (
4715+
<svg {...props} viewBox='0 0 80 80' xmlns='http://www.w3.org/2000/svg'>
4716+
<defs>
4717+
<linearGradient x1='0%' y1='100%' x2='100%' y2='0%' id='sesGradient'>
4718+
<stop stopColor='#BD0816' offset='0%' />
4719+
<stop stopColor='#FF5252' offset='100%' />
4720+
</linearGradient>
4721+
</defs>
4722+
<rect fill='url(#sesGradient)' width='80' height='80' />
4723+
<path
4724+
d='M57,60.999875 C57,59.373846 55.626,57.9998214 54,57.9998214 C52.374,57.9998214 51,59.373846 51,60.999875 C51,62.625904 52.374,63.9999286 54,63.9999286 C55.626,63.9999286 57,62.625904 57,60.999875 L57,60.999875 Z M40,59.9998571 C38.374,59.9998571 37,61.3738817 37,62.9999107 C37,64.6259397 38.374,65.9999643 40,65.9999643 C41.626,65.9999643 43,64.6259397 43,62.9999107 C43,61.3738817 41.626,59.9998571 40,59.9998571 L40,59.9998571 Z M26,57.9998214 C24.374,57.9998214 23,59.373846 23,60.999875 C23,62.625904 24.374,63.9999286 26,63.9999286 C27.626,63.9999286 29,62.625904 29,60.999875 C29,59.373846 27.626,57.9998214 26,57.9998214 L26,57.9998214 Z M28.605,42.9995536 L51.395,42.9995536 L43.739,36.1104305 L40.649,38.7584778 C40.463,38.9194807 40.23,38.9994821 39.999,38.9994821 C39.768,38.9994821 39.535,38.9194807 39.349,38.7584778 L36.26,36.1104305 L28.605,42.9995536 Z M27,28.1732888 L27,41.7545313 L34.729,34.7984071 L27,28.1732888 Z M51.297,26.9992678 L28.703,26.9992678 L39.999,36.6824408 L51.297,26.9992678 Z M53,41.7545313 L53,28.1732888 L45.271,34.7974071 L53,41.7545313 Z M59,60.999875 C59,63.7099234 56.71,65.9999643 54,65.9999643 C51.29,65.9999643 49,63.7099234 49,60.999875 C49,58.6308327 50.75,56.5837961 53,56.1057876 L53,52.9997321 L41,52.9997321 L41,58.1058233 C43.25,58.5838319 45,60.6308684 45,62.9999107 C45,65.7099591 42.71,68 40,68 C37.29,68 35,65.7099591 35,62.9999107 C35,60.6308684 36.75,58.5838319 39,58.1058233 L39,52.9997321 L27,52.9997321 L27,56.1057876 C29.25,56.5837961 31,58.6308327 31,60.999875 C31,63.7099234 28.71,65.9999643 26,65.9999643 C23.29,65.9999643 21,63.7099234 21,60.999875 C21,58.6308327 22.75,56.5837961 25,56.1057876 L25,51.9997143 C25,51.4477044 25.447,50.9996964 26,50.9996964 L39,50.9996964 L39,44.9995893 L26,44.9995893 C25.447,44.9995893 25,44.5515813 25,43.9995714 L25,25.99925 C25,25.4472401 25.447,24.9992321 26,24.9992321 L54,24.9992321 C54.553,24.9992321 55,25.4472401 55,25.99925 L55,43.9995714 C55,44.5515813 54.553,44.9995893 54,44.9995893 L41,44.9995893 L41,50.9996964 L54,50.9996964 C54.553,50.9996964 55,51.4477044 55,51.9997143 L55,56.1057876 C57.25,56.5837961 59,58.6308327 59,60.999875 L59,60.999875 Z M68,39.9995 C68,45.9066055 66.177,51.5597064 62.727,56.3447919 L61.104,55.174771 C64.307,50.7316916 66,45.4845979 66,39.9995 C66,25.664244 54.337,14.0000357 40.001,14.0000357 C25.664,14.0000357 14,25.664244 14,39.9995 C14,45.4845979 15.693,50.7316916 18.896,55.174771 L17.273,56.3447919 C13.823,51.5597064 12,45.9066055 12,39.9995 C12,24.5612243 24.561,12 39.999,12 C55.438,12 68,24.5612243 68,39.9995 L68,39.9995 Z'
4725+
fill='#FFFFFF'
4726+
/>
4727+
</svg>
4728+
)
4729+
}
4730+
47024731
export function SecretsManagerIcon(props: SVGProps<SVGSVGElement>) {
47034732
return (
47044733
<svg {...props} viewBox='0 0 80 80' xmlns='http://www.w3.org/2000/svg'>

apps/docs/components/ui/icon-mapping.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ import {
9191
HuggingFaceIcon,
9292
HunterIOIcon,
9393
IAMIcon,
94+
IdentityCenterIcon,
9495
ImageIcon,
9596
IncidentioIcon,
9697
InfisicalIcon,
@@ -152,6 +153,7 @@ import {
152153
RootlyIcon,
153154
S3Icon,
154155
SalesforceIcon,
156+
SESIcon,
155157
SearchIcon,
156158
SecretsManagerIcon,
157159
SendgridIcon,
@@ -294,6 +296,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
294296
huggingface: HuggingFaceIcon,
295297
hunter: HunterIOIcon,
296298
iam: IAMIcon,
299+
identity_center: IdentityCenterIcon,
297300
image_generator: ImageIcon,
298301
imap: MailServerIcon,
299302
incidentio: IncidentioIcon,
@@ -370,6 +373,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
370373
sentry: SentryIcon,
371374
serper: SerperIcon,
372375
servicenow: ServiceNowIcon,
376+
ses: SESIcon,
373377
sftp: SftpIcon,
374378
sharepoint: MicrosoftSharepointIcon,
375379
shopify: ShopifyIcon,

apps/docs/content/docs/en/tools/cloudwatch.mdx

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,12 @@ Run a CloudWatch Log Insights query against one or more log groups
5757

5858
| Parameter | Type | Description |
5959
| --------- | ---- | ----------- |
60-
| `results` | array | Query result rows |
61-
| `statistics` | object | Query statistics \(bytesScanned, recordsMatched, recordsScanned\) |
62-
| `status` | string | Query completion status |
60+
| `results` | array | Query result rows \(each row is a key/value map of field name to value\) |
61+
| `statistics` | object | Query statistics |
62+
|`bytesScanned` | number | Total bytes of log data scanned |
63+
|`recordsMatched` | number | Number of log records that matched the query |
64+
|`recordsScanned` | number | Total log records scanned |
65+
| `status` | string | Query completion status \(Complete, Failed, Cancelled, or Timeout\) |
6366

6467
### `cloudwatch_describe_log_groups`
6568

@@ -80,6 +83,11 @@ List available CloudWatch log groups
8083
| Parameter | Type | Description |
8184
| --------- | ---- | ----------- |
8285
| `logGroups` | array | List of CloudWatch log groups with metadata |
86+
|`logGroupName` | string | Log group name |
87+
|`arn` | string | Log group ARN |
88+
|`storedBytes` | number | Total stored bytes |
89+
|`retentionInDays` | number | Retention period in days \(if set\) |
90+
|`creationTime` | number | Creation time in epoch milliseconds |
8391

8492
### `cloudwatch_get_log_events`
8593

@@ -103,6 +111,9 @@ Retrieve log events from a specific CloudWatch log stream
103111
| Parameter | Type | Description |
104112
| --------- | ---- | ----------- |
105113
| `events` | array | Log events with timestamp, message, and ingestion time |
114+
|`timestamp` | number | Event timestamp in epoch milliseconds |
115+
|`message` | string | Log event message |
116+
|`ingestionTime` | number | Ingestion time in epoch milliseconds |
106117

107118
### `cloudwatch_describe_log_streams`
108119

@@ -123,7 +134,12 @@ List log streams within a CloudWatch log group
123134

124135
| Parameter | Type | Description |
125136
| --------- | ---- | ----------- |
126-
| `logStreams` | array | List of log streams with metadata |
137+
| `logStreams` | array | List of log streams with metadata, sorted by last event time \(most recent first\) unless a prefix filter is applied |
138+
|`logStreamName` | string | Log stream name |
139+
|`lastEventTimestamp` | number | Timestamp of the last log event in epoch milliseconds |
140+
|`firstEventTimestamp` | number | Timestamp of the first log event in epoch milliseconds |
141+
|`creationTime` | number | Stream creation time in epoch milliseconds |
142+
|`storedBytes` | number | Total stored bytes |
127143

128144
### `cloudwatch_list_metrics`
129145

@@ -146,6 +162,9 @@ List available CloudWatch metrics
146162
| Parameter | Type | Description |
147163
| --------- | ---- | ----------- |
148164
| `metrics` | array | List of metrics with namespace, name, and dimensions |
165+
|`namespace` | string | Metric namespace \(e.g., AWS/EC2\) |
166+
|`metricName` | string | Metric name \(e.g., CPUUtilization\) |
167+
|`dimensions` | array | Array of name/value dimension pairs |
149168

150169
### `cloudwatch_get_metric_statistics`
151170

@@ -170,8 +189,15 @@ Get statistics for a CloudWatch metric over a time range
170189

171190
| Parameter | Type | Description |
172191
| --------- | ---- | ----------- |
173-
| `label` | string | Metric label |
174-
| `datapoints` | array | Datapoints with timestamp and statistics values |
192+
| `label` | string | Metric label returned by CloudWatch |
193+
| `datapoints` | array | Datapoints sorted by timestamp with statistics values |
194+
|`timestamp` | number | Datapoint timestamp in epoch milliseconds |
195+
|`average` | number | Average statistic value |
196+
|`sum` | number | Sum statistic value |
197+
|`minimum` | number | Minimum statistic value |
198+
|`maximum` | number | Maximum statistic value |
199+
|`sampleCount` | number | Sample count statistic value |
200+
|`unit` | string | Unit of the metric |
175201

176202
### `cloudwatch_put_metric_data`
177203

@@ -222,5 +248,13 @@ List and filter CloudWatch alarms
222248
| Parameter | Type | Description |
223249
| --------- | ---- | ----------- |
224250
| `alarms` | array | List of CloudWatch alarms with state and configuration |
251+
|`alarmName` | string | Alarm name |
252+
|`alarmArn` | string | Alarm ARN |
253+
|`stateValue` | string | Current state \(OK, ALARM, INSUFFICIENT_DATA\) |
254+
|`stateReason` | string | Human-readable reason for the state |
255+
|`metricName` | string | Metric name \(MetricAlarm only\) |
256+
|`namespace` | string | Metric namespace \(MetricAlarm only\) |
257+
|`threshold` | number | Threshold value \(MetricAlarm only\) |
258+
|`stateUpdatedTimestamp` | number | Epoch ms when state last changed |
225259

226260

apps/docs/content/docs/en/tools/dynamodb.mdx

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: Amazon DynamoDB
3-
description: Connect to Amazon DynamoDB
3+
description: Get, put, query, scan, update, and delete items in Amazon DynamoDB tables
44
---
55

66
import { BlockInfoCard } from "@/components/ui/block-info-card"
@@ -55,15 +55,15 @@ Get an item from a DynamoDB table by primary key
5555
| `accessKeyId` | string | Yes | AWS access key ID |
5656
| `secretAccessKey` | string | Yes | AWS secret access key |
5757
| `tableName` | string | Yes | DynamoDB table name \(e.g., "Users", "Orders"\) |
58-
| `key` | object | Yes | Primary key of the item to retrieve \(e.g., \{"pk": "USER#123"\} or \{"pk": "ORDER#456", "sk": "ITEM#789"\}\) |
58+
| `key` | json | Yes | Primary key of the item to retrieve \(e.g., \{"pk": "USER#123"\} or \{"pk": "ORDER#456", "sk": "ITEM#789"\}\) |
5959
| `consistentRead` | boolean | No | Use strongly consistent read |
6060

6161
#### Output
6262

6363
| Parameter | Type | Description |
6464
| --------- | ---- | ----------- |
6565
| `message` | string | Operation status message |
66-
| `item` | object | Retrieved item |
66+
| `item` | json | Retrieved item |
6767

6868
### `dynamodb_put`
6969

@@ -77,14 +77,17 @@ Put an item into a DynamoDB table
7777
| `accessKeyId` | string | Yes | AWS access key ID |
7878
| `secretAccessKey` | string | Yes | AWS secret access key |
7979
| `tableName` | string | Yes | DynamoDB table name \(e.g., "Users", "Orders"\) |
80-
| `item` | object | Yes | Item to put into the table \(e.g., \{"pk": "USER#123", "name": "John", "email": "john@example.com"\}\) |
80+
| `item` | json | Yes | Item to put into the table \(e.g., \{"pk": "USER#123", "name": "John", "email": "john@example.com"\}\) |
81+
| `conditionExpression` | string | No | Condition that must be met for the put to succeed \(e.g., "attribute_not_exists\(pk\)" to prevent overwrites\) |
82+
| `expressionAttributeNames` | json | No | Attribute name mappings for reserved words used in conditionExpression \(e.g., \{"#name": "name"\}\) |
83+
| `expressionAttributeValues` | json | No | Expression attribute values used in conditionExpression \(e.g., \{":expected": "value"\}\) |
8184

8285
#### Output
8386

8487
| Parameter | Type | Description |
8588
| --------- | ---- | ----------- |
8689
| `message` | string | Operation status message |
87-
| `item` | object | Created item |
90+
| `item` | json | Created item |
8891

8992
### `dynamodb_query`
9093

@@ -100,10 +103,12 @@ Query items from a DynamoDB table using key conditions
100103
| `tableName` | string | Yes | DynamoDB table name \(e.g., "Users", "Orders"\) |
101104
| `keyConditionExpression` | string | Yes | Key condition expression \(e.g., "pk = :pk" or "pk = :pk AND sk BEGINS_WITH :prefix"\) |
102105
| `filterExpression` | string | No | Filter expression for results \(e.g., "age &gt; :minAge AND #status = :status"\) |
103-
| `expressionAttributeNames` | object | No | Attribute name mappings for reserved words \(e.g., \{"#status": "status"\}\) |
104-
| `expressionAttributeValues` | object | No | Expression attribute values \(e.g., \{":pk": "USER#123", ":minAge": 18\}\) |
106+
| `expressionAttributeNames` | json | No | Attribute name mappings for reserved words \(e.g., \{"#status": "status"\}\) |
107+
| `expressionAttributeValues` | json | No | Expression attribute values \(e.g., \{":pk": "USER#123", ":minAge": 18\}\) |
105108
| `indexName` | string | No | Secondary index name to query \(e.g., "GSI1", "email-index"\) |
106109
| `limit` | number | No | Maximum number of items to return \(e.g., 10, 50, 100\) |
110+
| `exclusiveStartKey` | json | No | Pagination token from a previous query's lastEvaluatedKey to continue fetching results |
111+
| `scanIndexForward` | boolean | No | Sort order for the sort key: true for ascending \(default\), false for descending |
107112

108113
#### Output
109114

@@ -112,6 +117,7 @@ Query items from a DynamoDB table using key conditions
112117
| `message` | string | Operation status message |
113118
| `items` | array | Array of items returned |
114119
| `count` | number | Number of items returned |
120+
| `lastEvaluatedKey` | json | Pagination token to pass as exclusiveStartKey to fetch the next page of results |
115121

116122
### `dynamodb_scan`
117123

@@ -127,9 +133,10 @@ Scan all items in a DynamoDB table
127133
| `tableName` | string | Yes | DynamoDB table name \(e.g., "Users", "Orders"\) |
128134
| `filterExpression` | string | No | Filter expression for results \(e.g., "age &gt; :minAge AND #status = :status"\) |
129135
| `projectionExpression` | string | No | Attributes to retrieve \(e.g., "pk, sk, #name, email"\) |
130-
| `expressionAttributeNames` | object | No | Attribute name mappings for reserved words \(e.g., \{"#name": "name", "#status": "status"\}\) |
131-
| `expressionAttributeValues` | object | No | Expression attribute values \(e.g., \{":minAge": 18, ":status": "active"\}\) |
136+
| `expressionAttributeNames` | json | No | Attribute name mappings for reserved words \(e.g., \{"#name": "name", "#status": "status"\}\) |
137+
| `expressionAttributeValues` | json | No | Expression attribute values \(e.g., \{":minAge": 18, ":status": "active"\}\) |
132138
| `limit` | number | No | Maximum number of items to return \(e.g., 10, 50, 100\) |
139+
| `exclusiveStartKey` | json | No | Pagination token from a previous scan's lastEvaluatedKey to continue fetching results |
133140

134141
#### Output
135142

@@ -138,6 +145,7 @@ Scan all items in a DynamoDB table
138145
| `message` | string | Operation status message |
139146
| `items` | array | Array of items returned |
140147
| `count` | number | Number of items returned |
148+
| `lastEvaluatedKey` | json | Pagination token to pass as exclusiveStartKey to fetch the next page of results |
141149

142150
### `dynamodb_update`
143151

@@ -151,18 +159,18 @@ Update an item in a DynamoDB table
151159
| `accessKeyId` | string | Yes | AWS access key ID |
152160
| `secretAccessKey` | string | Yes | AWS secret access key |
153161
| `tableName` | string | Yes | DynamoDB table name \(e.g., "Users", "Orders"\) |
154-
| `key` | object | Yes | Primary key of the item to update \(e.g., \{"pk": "USER#123"\} or \{"pk": "ORDER#456", "sk": "ITEM#789"\}\) |
162+
| `key` | json | Yes | Primary key of the item to update \(e.g., \{"pk": "USER#123"\} or \{"pk": "ORDER#456", "sk": "ITEM#789"\}\) |
155163
| `updateExpression` | string | Yes | Update expression \(e.g., "SET #name = :name, age = :age" or "SET #count = #count + :inc"\) |
156-
| `expressionAttributeNames` | object | No | Attribute name mappings for reserved words \(e.g., \{"#name": "name", "#count": "count"\}\) |
157-
| `expressionAttributeValues` | object | No | Expression attribute values \(e.g., \{":name": "John", ":age": 30, ":inc": 1\}\) |
164+
| `expressionAttributeNames` | json | No | Attribute name mappings for reserved words \(e.g., \{"#name": "name", "#count": "count"\}\) |
165+
| `expressionAttributeValues` | json | No | Expression attribute values \(e.g., \{":name": "John", ":age": 30, ":inc": 1\}\) |
158166
| `conditionExpression` | string | No | Condition that must be met for the update to succeed \(e.g., "attribute_exists\(pk\)" or "version = :expectedVersion"\) |
159167

160168
#### Output
161169

162170
| Parameter | Type | Description |
163171
| --------- | ---- | ----------- |
164172
| `message` | string | Operation status message |
165-
| `item` | object | Updated item |
173+
| `item` | json | Updated item with all attributes |
166174

167175
### `dynamodb_delete`
168176

@@ -176,8 +184,10 @@ Delete an item from a DynamoDB table
176184
| `accessKeyId` | string | Yes | AWS access key ID |
177185
| `secretAccessKey` | string | Yes | AWS secret access key |
178186
| `tableName` | string | Yes | DynamoDB table name \(e.g., "Users", "Orders"\) |
179-
| `key` | object | Yes | Primary key of the item to delete \(e.g., \{"pk": "USER#123"\} or \{"pk": "ORDER#456", "sk": "ITEM#789"\}\) |
187+
| `key` | json | Yes | Primary key of the item to delete \(e.g., \{"pk": "USER#123"\} or \{"pk": "ORDER#456", "sk": "ITEM#789"\}\) |
180188
| `conditionExpression` | string | No | Condition that must be met for the delete to succeed \(e.g., "attribute_exists\(pk\)"\) |
189+
| `expressionAttributeNames` | json | No | Attribute name mappings for reserved words used in conditionExpression \(e.g., \{"#status": "status"\}\) |
190+
| `expressionAttributeValues` | json | No | Expression attribute values used in conditionExpression \(e.g., \{":status": "active"\}\) |
181191

182192
#### Output
183193

@@ -204,6 +214,6 @@ Introspect DynamoDB to list tables or get detailed schema information for a spec
204214
| --------- | ---- | ----------- |
205215
| `message` | string | Operation status message |
206216
| `tables` | array | List of table names in the region |
207-
| `tableDetails` | object | Detailed schema information for a specific table |
217+
| `tableDetails` | json | Detailed schema information for a specific table |
208218

209219

0 commit comments

Comments
 (0)